从列表中提取信息

时间:2016-10-09 19:20:06

标签: r

我有一个列表,在下面的示例中看起来像xyz。

> x <- list(a=c("cat", "dog"), b=c("parrot", "chicken"), c=c("animal", "monkey"))
> y <- list(a=c("cat", "dog"), b=c("parrot", "chicken"), c=c("animal", "monkey"))
> z <- list(a=c("cat", "dog"), b=c("parrot", "chicken"), c=c("animal", "monkey"))
> xyz <- list(x, y, z)
> xyz
[[1]]
[[1]]$a
[1] "cat" "dog"

[[1]]$b
[1] "parrot"  "chicken"

[[1]]$c
[1] "animal" "monkey"


[[2]]
[[2]]$a
[1] "cat" "dog"

[[2]]$b
[1] "parrot"  "chicken"

[[2]]$c
[1] "animal" "monkey"


[[3]]
[[3]]$a
[1] "cat" "dog"

[[3]]$b
[1] "parrot"  "chicken"

[[3]]$c
[1] "animal" "monkey"

现在我想为xyz中的每个列表提取存储在$ b中的信息。

xyz的长度会不时变化,因此xyz列表中列b的长度也会变化。但是我总是希望从b中提取信息。

所需的输出是一个向量,每列的列b都有信息。

> desired_output <- data.frame(x=c(xyz[[1]]$b, xyz[[2]]$b, xyz[[3]]$b))
> desired_output
        x
1  parrot
2 chicken
3  parrot
4 chicken
5  parrot
6 chicken

我的数据看起来更像。

> x <-list(df=data.frame((c(data.frame(a=c("cat", "dog"), b=c("cat", "dog"))))))
> x <-list(df=data.frame((c(data.frame(a=c("cat", "dog"), b=c("cat", "dog"))))))
> y <-list(df=data.frame((c(data.frame(a=c("cat", "dog"), b=c("cat", "dog"))))))
> z <-list(df=data.frame((c(data.frame(a=c("cat", "dog"), b=c("cat", "dog"))))))
> xyz<- list(x,y,z)
> class(xyz[[1]])
[1] "list"
> class(xyz[[1]]$df)
[1] "data.frame"
> xyz[[1]]$df$b
[1] cat dog

现在,我想在xyz中为每个数据框提取b列中的信息。

1 个答案:

答案 0 :(得分:0)

绝对是重复的,但是使用一些较新的包可以做到这一点

library(purrr)
library(magrittr)
map(xyz, ~extract(.$b)) %>% unlist() %>% as.data.frame()