2016-10-09 51 views
-1

我在下面的示例中列出了類似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 

現在我想在by中爲xyz中的每個數據幀提取信息。

+0

感謝您快速評論。我現在看到我的名單結構略有不同。 unlist(lapply(xyz,「[[」,「b $ c」)) 這不會工作嗎? – samot79

+0

你有一個名爲b的數據框架嗎? – Nate

+0

是..對不起,重複,並沒有解決我的問題。我有一個列表清單。每個列表都包含一個數據框,並且我想提取數據框「b」列中的所有信息。 我會寫一個更好的問題,如果我沒有找到答案。 感謝您的幫助。 – samot79

回答

0

絕對是一個重複的,但也有一些較新的軟件包,你可以做到這一點

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

'xyz%>%map_df(〜list(x =。$ b))'也可能是一個選項 – Rentrop

+0

ooo那很好 – Nate