从另一个列表中的列表中的每个列表中提取相同的项目

时间:2019-04-22 03:18:49

标签: r list

我有一个列表(从此示例subsetting lists修改而来)

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

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

可能对您有帮助

library(purrr)
map(l3, ~ .x[[1]]$X1)

或将pluckselect一起使用

library(dplyr)
map(l3, ~ .x %>% 
            pluck(1) %>% 
            select(X1))

或者,如果我们不是连锁爱好者,那么可以像@ArtemSokolov所述

map(l3, pluck, 1, "X1")

或与lapply

lapply(l3, function(x) x[[1]]$X1)

答案 1 :(得分: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