[英]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.