在嵌套列表的数据框中子集特定变量

时间:2018-08-01 13:46:31

标签: r

我有一个看起来类似于的嵌套列表

test <- list(a = list(a1 = 1:5, a2 = 6:10, a3=data.frame(a4 = letters, a5 = LETTERS)),
     b = list(a1 = 11:15, a2 = 16:20, a3=data.frame(a4 = letters, a5 = LETTERS)))

我有兴趣为每个data.frame提取向量a5(可能是列表)。我知道我可以使用以下内容提取列表中的特定元素(例如数据框)

a3 <- sapply(test, '[', 'a3')

但我不确定如何在数据框中获取特定变量。

更新: 我还应该补充一点,我知道我可以在结果中使用lapply(例如lapply(a3, '[', 'a5')来获取数据帧,但我想知道是否有更短的方法。

2 个答案:

答案 0 :(得分:2)

您可以尝试rlist中的list.select

library(rlist)
list.select(test, a3$a5)
#$a
#$a[[1]]
# [1] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#
#
#$b
#$b[[1]]
# [1] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

另一个使用lapply

的选项
lapply(test, function(x) {
  x$a3$a5
})

答案 1 :(得分:1)

这里是map

的一个选项
library(tidyverse)
map(test, ~ pluck(.x$a3, "a5"))
#$a
# [1] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

#$b
# [1] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z