簡體   English   中英

如何遞歸地加入在 R 中共享一個列名的嵌套列表?

[英]How to recursively join nested lists that share one column name in R?

我有一個具有以下結構的大型嵌套數據集:

> str(Normalized_All)
List of 48
 $ Traces/Sample10_1_D.csv:'data.frame':    2988 obs. of  2 variables:
  ..$ Time_min    : num [1:2988] 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 ...
  ..$ Sample10_1_D: num [1:2988] 0 0 0 0 0 0 0 0 0 0 ...
 $ Traces/Sample10_1_L.csv:'data.frame':    2965 obs. of  2 variables:
  ..$ Time_min    : num [1:2965] 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 ...
  ..$ Sample10_1_L: num [1:2965] 0 0 0 0 0 0 0 0 0 0 ...
 $ Traces/Sample10_1_R.csv:'data.frame':    2962 obs. of  2 variables:
  ..$ Time_min    : num [1:2962] 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 ...
  ..$ Sample10_1_R: num [1:2962] 0 0 0 0 0 0 0 0 0 0 ...

我想基本上將所有數據全部加入一個小標題,但基本上是通過遞歸使用 dplyr::full_join(x,y, by="Time_min")。 我想使用 full_join 因為不是每個 Time_min 列的長度都相同,但是有很多重疊的時間點。 每個“樣本”列都有一個唯一的列名。 我本質上想最小化具有許多 NA 的行。

有沒有一種優雅的方式來做到這一點? 最好使用 dplyr 或相關的 tidyverse 包。

您也許可以簡單地嘗試:

all_data <- Normalized_all %>% Reduce( f=full_join )

這將按順序將它們完全加入彼此。

如果您從上面得到 memory 問題,您可以嘗試使用data.table代替:

library(data.table)

all_data2 <- Reduce( x=Normalized_All, f=function(a,b) {
    setDT(b)
    if( is.null(a)) {
        return(b)
    }
    merge( a, b, by="Time_min", all=TRUE )
}, init=NULL)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM