#r #list
#r #Список
Вопрос:
У меня есть список (измененный из этого примера, списки подмножеств), который выглядит как
l3 <- list(item1 = list(item1a = data.frame(matrix(1:9,ncol = 3)),
item1b=letters[1:5],
item1c = c(T, F, T, T)),
item2 = list(item2a = data.frame(matrix(10:19,ncol = 3)),
item2b=letters[1:5],
item2c = c(T, F, T, T)))
l3
$item1
$item1$item1a
X1 X2 X3
1 1 4 7
2 2 5 8
3 3 6 9
$item1$item1b
[1] "a" "b" "c" "d" "e"
$item1$item1c
[1] TRUE FALSE TRUE TRUE
$item2
$item2$item2a
X1 X2 X3
1 10 14 18
2 11 15 19
3 12 16 10
4 13 17 11
$item2$item2b
[1] "a" "b" "c" "d" "e"
$item2$item2c
[1] TRUE FALSE TRUE TRUE
Я хотел бы выбрать переменную X1 из каждого наименьшего списка. Это код, который я написал, но я еще не добился успеха.
l3[[1:2]]["X1"]
[1] NA
Приведенный ниже код дает значение X1 только для первого вложенного фрейма данных (это то, что я хочу получить для всех фреймов данных)
l3[[1]]$item1a$X1
[1] 1 2 3
Любая помощь очень ценится!
Ответ №1:
Может быть, это помогает
library(purrr)
map(l3, ~ .x[[1]]$X1)
Или с помощью pluck
с select
library(dplyr)
map(l3, ~ .x %>%
pluck(1) %>%
select(X1))
Или, если мы не являемся энтузиастами цепочки, то это можно сделать более компактно, как упоминал @ArtemSokolov
map(l3, pluck, 1, "X1")
Или с lapply
lapply(l3, function(x) x[[1]]$X1)
Комментарии:
1.
pluck
будет правильно выбирать столбцы фрейма данных, поэтому вы можете просто сделать:map( l3, pluck, 1, "X1" )
. Нетselect()
необходимости.
Ответ №2:
С plyr
:
plyr::llply(l3,function(x)x[[1]]["X1"])
$item1
X1
1 1
2 2
3 3
$item2
X1
1 10
2 11
3 12
4 13
Комментарии:
1. Мне нравится этот код, потому что он сохраняет исходный формат. Спасибо!