2016-10-09 2 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 

이제 xyz의 각 데이터 프레임에 대해 b 열에 정보를 추출하고 싶습니다.

+0

감사 할 수 있습니다. 내 목록이 약간 다른 구조로 바뀌 었음을 알았습니다. unlist (lapply (xyz, "[[", "b $ c")) 이 작동하지 않습니까? – samot79

+0

c라는 어딘가에 b라는 이름의 data.frame이 있습니까? – 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

멋집니다. – Nate