Вопрос о :
У меня есть строковый вектор foo:
>foo = c("1x2","3x4","5x6","7x8","9x10")
Я разделяю отдельные строки по «x» и наклеиваю результат на goo:
>goo = strsplit(foo, "x")
>goo
[[1]]
[1] "1" "2"
[[2]]
[1] "3" "4"
[[3]]
[1] "5" "6"
[[4]]
[1] "7" "8"
[[5]]
[1] "9" "10"
Как мне извлечь первую и вторую «колонку» из этого списка? (Я хочу (1,3,5,7,9) и (2,4,6,8,10))
read.table(text = foo, sep = 'x')[, 1]




Используйте sapply для последовательного "извлечения" с помощью "[[":
sapply(goo, "[[" , 1)
[1] "1" "3" "5" "7" "9"
Я всегда думал, что это должно быть результатом, но, вероятно, я не понимаю проблемы.
Самый простой способ - заключить результаты в оператор sapply.
odd_results <- sapply(goo, function(x) x[1])
а также
even_results <- sapply(goo, function(x) x[2])
Вам нужно будет указать извлечение элементов списка по позиции.
# load data
foo <- c("1x2","3x4","5x6","7x8","9x10")
# split foo by 'x'
foo.list <- strsplit( x = foo, split = "x", fixed = TRUE )
# store the first and second elements of each list in a data frame
foo.df <-
data.frame(
First_Element = unlist( lapply( X = foo.list, FUN = "[[", FUN.VALUE = 1 ) )
, Second_Element = unlist( lapply( X = foo.list, FUN = "[[", FUN.VALUE = 2 ) )
)
Для разнообразия вы можете использовать
goo <- unlist(strsplit(foo, "x"))
a <- goo[seq(1, length(goo), 2)]
b <- goo[seq(2, length(goo), 2)]
Который дает
[1] "1" "3" "5" "7" "9"
а также
[1] "2" "4" "6" "8" "10"
соответственно.
> result <- do.call(rbind, goo)
> result
[,1] [,2]
[1,] "1" "2"
[2,] "3" "4"
[3,] "5" "6"
[4,] "7" "8"
[5,] "9" "10"
> result[, 1] # column 1
[1] "1" "3" "5" "7" "9"
> result[, 2] # column 2
[1] "2" "4" "6" "8" "10"
sapply(goo, identity)затем нарежьте ряды.