2017-01-11 2 views
2

this과 같은 다양한 rbinding 목록 질문을 살펴 봤지만 더 효율적인 방법을 찾을 수 없습니다. 나는 일반 value 열을 기준으로 목록 1,리스트 2와 목록 3에서 각 개체를 rbind 할 수있는 쉬운 방법을 찾으려면중첩 목록의 데이터 프레임 rbind

df1 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueA = seq(0.1,0.4,0.1), Category= "Apples") 
df2 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueB = seq(0.1,0.4,0.1), Category= "Apples") 
list1 <- list(df1,df2) 

df3 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueA = seq(0.1,0.4,0.1), Category= "Pears") 
df4 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueB = seq(0.1,0.4,0.1), Category= "Pears") 
list2 <- list(df3,df4) 

df5 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueA = seq(0.1,0.4,0.1), Category= "Stairs") 
df6 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueB = seq(0.1,0.4,0.1), Category= "Stairs") 
list3 <- list(df5,df6) 

nestedlist <- list(list1,list2,list3) 

:

나는 각각 두 dataframes를 확인할 수있는 목록을 포함하는 중첩 된 목록 nestlist이 내가 끝낼 수 있도록 :

rbind(nestedlist[[1]][[1]],nestedlist[[2]][[1]], nestedlist[[3]][[1]]) 

    ID A Category 
1 A1 0.1 Apples 
2 B2 0.2 Apples 
3 C3 0.3 Apples 
4 D4 0.4 Apples 
5 A1 0.1 Pears 
6 B2 0.2 Pears 
7 C3 0.3 Pears 
8 D4 0.4 Pears 
9 A1 0.1 Stairs 
10 B2 0.2 Stairs 
11 C3 0.3 Stairs 
12 D4 0.4 Stairs 

답변

3

당신은 인수가 병렬 방식으로이 목록을 통해하는 것입니다 루프지도 및,121 전화로,이 중첩 된 목록을 통과 do.call(Map, ...) 사용할 수 있습니다 함께 같은 위치에서 목록을 결합 할 Map 함수로 83,210 :

do.call(Map, c(f = rbind, nestedlist)) 

# [[1]] 
# ID valueA Category 
# 1 A1 0.1 Apples 
# 2 B2 0.2 Apples 
# 3 C3 0.3 Apples 
# 4 D4 0.4 Apples 
# 5 A1 0.1 Pears 
# 6 B2 0.2 Pears 
# 7 C3 0.3 Pears 
# 8 D4 0.4 Pears 
# 9 A1 0.1 Stairs 
# 10 B2 0.2 Stairs 
# 11 C3 0.3 Stairs 
# 12 D4 0.4 Stairs 
# 
# [[2]] 
# ID valueB Category 
# 1 A1 0.1 Apples 
# 2 B2 0.2 Apples 
# 3 C3 0.3 Apples 
# 4 D4 0.4 Apples 
# 5 A1 0.1 Pears 
# 6 B2 0.2 Pears 
# 7 C3 0.3 Pears 
# 8 D4 0.4 Pears 
# 9 A1 0.1 Stairs 
# 10 B2 0.2 Stairs 
# 11 C3 0.3 Stairs 
# 12 D4 0.4 Stairs 
+0

난 정말이 솔루션 등으로부터 bind_rows을 사용할 수 있습니다 - 간단하고 효율적인 - 감사합니다! 나는 그것이 @akrun 해결책보다 빠르지 않을까? – Bonono

1

우리는

library(purrr) 
lapply(transpose(nestedlist), function(x) do.call(rbind, x)) 

을 시도하거나 dplyr

library(dplyr) 
transpose(nestedlist) %>% 
       map(bind_rows) 
#[[1]] 
# ID valueA Category 
#1 A1 0.1 Apples 
#2 B2 0.2 Apples 
#3 C3 0.3 Apples 
#4 D4 0.4 Apples 
#5 A1 0.1 Pears 
#6 B2 0.2 Pears 
#7 C3 0.3 Pears 
#8 D4 0.4 Pears 
#9 A1 0.1 Stairs 
#10 B2 0.2 Stairs 
#11 C3 0.3 Stairs 
#12 D4 0.4 Stairs 

#[[2]] 
# ID valueB Category 
#1 A1 0.1 Apples 
#2 B2 0.2 Apples 
#3 C3 0.3 Apples 
#4 D4 0.4 Apples 
#5 A1 0.1 Pears 
#6 B2 0.2 Pears 
#7 C3 0.3 Pears 
#8 D4 0.4 Pears 
#9 A1 0.1 Stairs 
#10 B2 0.2 Stairs 
#11 C3 0.3 Stairs 
#12 D4 0.4 Stairs 
관련 문제