【问题标题】:How to rbind multiple dataframes with a while-loop?如何使用while循环来绑定多个数据帧?
【发布时间】:2021-11-07 18:25:33
【问题描述】:

我正在尝试 rbind 多个加载的数据集(它们都具有相同的列数,名为“num”、“source”和“target”)。以防万一,我有十个数据框,名称分别是“test1”、“test2”、“test3”等等......

我认为尝试下面的解决方案(创建一个空的数据框并遍历其他数据框)可以解决我的问题,但我想我在 rbind 函数的第二个参数中遗漏了一些东西。我不知道使用 paste0("test", I) 来增加变量(更改数据框的名称)的解决方案是否正确......我担心我只是想用一个 rbind 一个数据框字符串对象(并得到一个错误),对吗?

test = as.data.frame(matrix(ncol = 3, nrow = 0)) %>%
  setNames(c("num", "source", "target"))
i=1
while (i < 11) {
  test = rbind(test, paste0("test", i))
  i = i + 1
}

【问题讨论】:

    标签: r while-loop rbind


    【解决方案1】:

    我们需要replicatelist 的形式返回

    out <- setNames(replicate(10, test, simplify = FALSE), 
           paste0("test", seq_len(10)))
    

    如果全局环境中已经创建了多个数据集,请将它们放入do.call 内的listrbind

    out <- do.call(rbind, mget(paste0("test", 1:10)))
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,这可能会对你有所帮助

      library(dplyr)
      

      示例数据

      list_of_df <-
        list(
        df1 = data.frame(a = "1"),
        df2 = data.frame(a = "2"),
        df3 = data.frame(a = "1"),
        df4 = data.frame(a = "2")
      )
      

      代码

      bind_rows(list_of_df,.id = "dataset")
      

      结果

        dataset a
      1     df1 1
      2     df2 2
      3     df3 1
      4     df4 2
      

      【讨论】:

      • 实际上我试图避免输入每个数据框名称的必要性......因为我已经将它们全部加载到我的全局环境中,我认为最好的解决方案是@akrun 发布的那个。 . 但还是谢谢
      【解决方案3】:

      我们可以使用名称中的通用模式绑定 test1:test10:

      library(dplyr)
      result <- mget(ls(pattern="^test\\d+")) %>%
          bind_rows()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-21
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        • 2015-06-23
        • 2021-10-15
        • 2019-09-15
        • 1970-01-01
        相关资源
        最近更新 更多