将一个数据帧列表合并为r中的单个数据帧



我有一个非常大的列表(只有一个列表),其中有13,500个元素。每个元素是一个1行12列的数据框,每个数据框的结构是相同的(相同的列名和每列中相似的数据)。我想把这个列表中的所有元素合并到一个数据框架中。这些新的数据框架将有13,500行和12列。我需要一个数据框架中的所有内容来处理ggplot和数据框架中的数据。有人能建议一下最好的方法吗?谢谢你的帮助。

我尝试使用purr:: merge(),但没有成功。或者至少这个过程没有在10分钟内完成,我不得不终止R studio。

下面是列表中的一些数据:

list(structure(list(n1 = 10, n2 = 10, mean_1 = 0, mean_2 = 0, var_1 = 1, var_2 = 1, tpooled = 2.93152220266846, pvalue_pooled = 0.00891647393074033, result_pooled = 1, t_unpooled = 2.93152220266846, pvalue_unpooled = 0.00931815204271521, result_unpooled = 1), class = "data.frame", row.names = "n1"), structure(list(n1 = 30, n2 = 10, mean_1 = 0, mean_2 = 0, var_1 = 1, var_2 = 1, tpooled = -0.312649684961248, pvalue_pooled = 0.756256229272491, result_pooled = 0, t_unpooled = -0.248766791009062, pvalue_unpooled = 0.808124700588531, result_unpooled = 0)

您的dput()代码未完成,因此我根据您的描述创建了一个示例列表:

ll <- vector(mode = "list", length = 100)
for (i in 1:length(ll)){
ll[[i]] <- data.frame(matrix(runif(12), nrow = 1))
}

是一个长度为100的列表,每个位置包含1行12列随机数的数据帧。要使其成为一个大数据帧(100行12列),请尝试:

ll_df <- do.call(rbind, ll)

输出:

# > ll_df
#     X1          X2         X3          X4         X5          X6         X7         X8          X9         X10        X11         X12
# 1  0.231912927 0.270163433 0.82299350 0.025836254 0.40592551 0.596034614 0.52873965 0.68257091 0.507812908 0.554371795 0.84124010 0.312510160
# 2  0.035948120 0.815994061 0.77857679 0.859379491 0.06571936 0.008806119 0.59168088 0.86961538 0.446291886 0.037575005 0.41029058 0.365216211
# 3  0.476584831 0.133677756 0.47945626 0.264312692 0.48993294 0.906061205 0.50099734 0.70350681 0.057910028 0.689310918 0.79879528 0.018855033
# 4  0.036814572 0.577822232 0.79003586 0.735261033 0.26853772 0.805366424 0.42493288 0.16521519 0.604047569 0.825760356 0.78095093 0.081476899
# 5  0.070758368 0.958960018 0.09029276 0.212251252 0.43920359 0.777871489 0.85140796 0.62472390 0.388040910 0.143754851 0.88167280 0.873741813
# 6  0.338623692 0.513312964 0.49393542 0.793437806 0.91841512 0.586360269 0.82348039 0.80743891 0.281572984 0.508648599 0.29522944 0.867623769
#...
# continues

另一个选项是使用dplyr中的bind_rows,它将从数据框列表中创建一个数据框,这是一个相当有效的选项。

library(dplyr)
bind_rows(ll)

然而,正如@nicola提到的,data.table中的rbindlist可能是最快的。

data.table::rbindlist(ll)

最新更新