【问题标题】:R - combine data frames of different lengths after loopR - 循环后组合不同长度的数据帧
【发布时间】:2015-07-25 21:55:22
【问题描述】:

我正在循环浏览一系列 15 个文件。我的循环如下所示:

for (i in 1:length(mod.f)) {
    do some stuff
    dataframe `df` is produced
}

循环的每次迭代都会产生一个包含两列的数据框 - 日期和一些值,就像下面的示例:

df <- structure(list(date = structure(c(-43829, -43798, -43770, -43739, 
-43709, -43678, -43648, -43617, -43586, -43556, -43525, -43495, 
-43464, -43433, -43405, -43374, -43344, -43313, -43283, -43252
), class = "Date"), inmcm4 = c(71.4782417258324, 68.5037706662898, 
64.0571482842429, 62.8708849771957, 66.3121740437669, 62.7535770507166, 
62.2819567665719, 62.3014754255822, 58.6247123853888, 58.4425949480101, 
61.3534245382973, 68.2531958750396, 70.4892992599108, 70.1840748468477, 
64.6298343911645, 66.5280510648649, 65.2767506692563, 62.8944646174169, 
60.4309882672837, 58.7368776782633)), .Names = c("date", "inmcm4"
), row.names = c(NA, 20L), class = "data.frame")

这里的问题是并非所有数据帧都具有相同的长度。每个数据帧的长度如下:

1872 
1740 
1872 
1932 
1872 
1752 
1752 
1872 
1872 
672 
1872 
1872 
1956 
1956 
1872

因此,并非所有日期(例如 df$date)都相同。

我想做的是在循环结束时将所有数据帧合并到一个数据帧中。这个最终的数据框应该有一个date 列,其余列将是每次迭代的值,将 NA 分配给不重叠的日期。

关于如何做到这一点的任何想法?

谢谢!

【问题讨论】:

    标签: r loops merge dataframe


    【解决方案1】:

    你可以试试

     Reduce(function(...) merge(..., by='date', all=TRUE), lst)
    

    lst 是 data.frames 的列表

    数据

    set.seed(24)
    df2 <- df[sample(1:nrow(df),8, replace=FALSE),]
    row.names(df2) <- NULL
    lst <- list(df, df2)
    

    【讨论】:

    • 问题是每个循环生成一个数据框(请看OP上的编辑信息)。因此,我没有 data.frames 列表。
    • @thiagoveloso 您可以将每次迭代的输出转移到lst,然后使用代码。使用lapply 可能更容易。否则,在开头定义一个列表。 lst &lt;- vector('list', 4); for (i in 1:length(mod.f)) { lst[[i]] &lt;- do some stuff}改4为迭代次数
    • 成功了!我刚刚使用lst &lt;- vector('list', length(mod.f)); for (i in 1:length(mod.f)) { lst[[i]] &lt;- df}。最终的结果非常优雅。感谢您提供如此简单有效的答案!我想知道我什么时候才能真正学习 R。:(
    • @thiagoveloso 感谢您的反馈。关于您最后的评论,您可以每天花 10-15 分钟来使用 R 解决问题,一段时间后会更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2020-04-10
    相关资源
    最近更新 更多