【问题标题】:For loop and paste() to merge multiple dataframes in Rfor循环和粘贴()合并R中的多个数据帧
【发布时间】:2013-03-28 02:08:33
【问题描述】:

我有多个相同的数据帧:X1、X2、...、X32

一个数据框的示例:

> X1
    value
1 3300320

我想要一个这样的数据框:

> XTotal
    value   X
1 3300320   1
2  345098   2
...
32  34355   32

我尝试使用 for 循环并粘贴(“X”、i、sep="")、rbind 等,但每次我得到一个这样的字符串列表:

> listDF
1  "X1"
2  "X2"
...
32 "X32"

所以,我无法正确调用每个数据框以将它们的值放入 XTotal 数据框...

我有点迷茫,知道吗?

提前致谢!

【问题讨论】:

    标签: r merge dataframe


    【解决方案1】:

    永远不要在循环中增长对象。这是非常低效的,因为它每次都会复制整个对象。

    要创建 data.frames 列表,请使用 getlapplymget

    dflist <-  mget(paste('X', 1:32), envir = parent.frame()) 
    # also valid
    # dflist <- lapply(paste('X', 1:32), get)
    
    # to combine them
    DFlist <- do.call('rbind', dflist)
    
    
    # or, faster
    library(data.table)
    DFlist <- rbindlist(dflist)
    

    如果 data.frames 没有相同的列/列顺序,请使用 rbind.fill from plyr

    library(plyr)
    DFlist <- rbind.fill(dflist)
    

    确实没有必要创建 dflist 显式

    以下任何一种方法也可以使用

    rbind.fill(mget(paste('X', 1:32), envir = parent.frame()))
    rbindlist(mget(paste('X', 1:32), envir = parent.frame()))
    do.call(rbind, mget(paste('X', 1:32), envir = parent.frame()))
    

    【讨论】:

    • 太棒了!非常感谢!我不知道 mget 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2021-07-21
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多