2016-07-29 2 views
3

data.frame 개체가 포함 된 중첩 목록이 있습니다. 이제이 목록을 병합해야합니다. 나는 unlist 메서드와 같은 가장 일반적인 접근법을 사용했는데, 그것은 내 목록에서 적절하게 비만되지 않았습니다. 출력은 잘 표현되지 않았습니다. 이 일을보다 효율적으로 수행하려면 어떻게해야합니까? 아무도이 작업을하는 어떤 트릭을 알고 있나요? 감사.unlist 메서드를 사용하는 대신 중첩 된 목록을 하나의 목록으로보다 효율적으로 병합하는 방법?

예 :이 같은 노력

mylist <- list(pass=list(Alpha.df1_yes=airquality[2:4,], Alpha.df2_yes=airquality[3:6,],Alpha.df3_yes=airquality[2:5,],Alpha.df4_yes=airquality[7:9,]), 
      fail=list(Alpha.df1_no=airquality[5:7,], Alpha.df2_no=airquality[8:10,], Alpha.df3_no=airquality[13:16,],Alpha.df4_no=airquality[11:13,])) 

, 그것은 작동하지만 출력이 제대로 배치되지 않았습니다.

res <- lapply(mylist, unlist) 

평평하게 한 후, 나는 중복없이 병합 할 싶습니다

out <- lapply(res, rbind.data.frame) 

내 원하는 출력 : 출력이 더 양립 표현 평평 이런 종류의를 만들 수있는 방법

mylist[[1]]$pass: 
    Ozone Solar.R Wind Temp Month Day 
2 36  118 8.0 72  5 2 
3 12  149 12.6 74  5 3 
4 18  313 11.5 62  5 4 

? 누구든지 R에서 이것을 할 수있는 가능한 아이디어를 제안 할 수 있습니까? 고마워.

+0

뭔가를 do.call'처럼 (rbind, unlist (mylist, FALSE))'? –

답변

4

lapply 사용 및 중복 :

우리가 다음, 아니 목록을 하나의 dataframe 모두를 유지하려는 경우 위는 여전히 목록을 반환
res <- lapply(mylist, function(i){ 
    x <- do.call(rbind, i) 
    x[ !duplicated(x), ] 
    rownames(x) <- NULL 
    x 
}) 

res$pass 
# Ozone Solar.R Wind Temp Month Day 
# 1  36  118 8.0 72  5 2 
# 2  12  149 12.6 74  5 3 
# 3  18  313 11.5 62  5 4 
# 4  12  149 12.6 74  5 3 
# 5  18  313 11.5 62  5 4 
# 6  NA  NA 14.3 56  5 5 
# 7  28  NA 14.9 66  5 6 
# 8  36  118 8.0 72  5 2 
# 9  12  149 12.6 74  5 3 
# 10 18  313 11.5 62  5 4 
# 11 NA  NA 14.3 56  5 5 
# 12 23  299 8.6 65  5 7 
# 13 19  99 13.8 59  5 8 
# 14  8  19 20.1 61  5 9 

:

res <- do.call(rbind, unlist(mylist, recursive = FALSE)) 
res <- res[!duplicated(res), ] 
res 
#      Ozone Solar.R Wind Temp Month Day 
# pass.Alpha.df1_yes.2 36  118 8.0 72  5 2 
# pass.Alpha.df1_yes.3 12  149 12.6 74  5 3 
# pass.Alpha.df1_yes.4 18  313 11.5 62  5 4 
# pass.Alpha.df2_yes.5 NA  NA 14.3 56  5 5 
# pass.Alpha.df2_yes.6 28  NA 14.9 66  5 6 
# pass.Alpha.df4_yes.7 23  299 8.6 65  5 7 
# pass.Alpha.df4_yes.8 19  99 13.8 59  5 8 
# pass.Alpha.df4_yes.9  8  19 20.1 61  5 9 
# fail.Alpha.df2_no.10 NA  194 8.6 69  5 10 
# fail.Alpha.df3_no.13 11  290 9.2 66  5 13 
# fail.Alpha.df3_no.14 14  274 10.9 68  5 14 
# fail.Alpha.df3_no.15 18  65 13.2 58  5 15 
# fail.Alpha.df3_no.16 14  334 11.5 64  5 16 
# fail.Alpha.df4_no.11  7  NA 6.9 74  5 11 
# fail.Alpha.df4_no.12 16  256 9.7 69  5 12