【问题标题】:how to cbind many data-frames?如何绑定许多数据帧?
【发布时间】:2020-02-29 01:27:22
【问题描述】:

我有 247 个按顺序命名的数据帧 (y1, y2, y3, ...., y247)。它们是由以下代码产生的:

for (i in (1:247)) {

  nam <- paste("y", i, sep = "")
  assign(nam, dairy[dairy$FARM==i,"YIT"])
}

我希望将它们全部绑定到:

df <- cbind(y1,y2,...,y247)

我可以在不输入所有 247 个数据帧的情况下循环执行此操作吗?

谢谢

【问题讨论】:

标签: r loops cbind


【解决方案1】:

如果你真的想这样做,是可以的:

df <- y1
for (i in 2:247) {
  df <- cbind(df, eval(parse(text=paste("y", i, sep = ''))))
}

【讨论】:

    【解决方案2】:

    在循环中创建许多变量并不是一个好主意。您应该改用列表:

    ys <- split(dairy$FARM, dairy$FARM)
    names(ys) <- paste0("y", names(ys))
    

    第一行创建列表ys,其中包含您的y1 作为其第一个元素(ys[[1]]),您的y2 作为其第二个元素(ys[[2]])等等。第二行命名列表元素的方式与您命名变量的方式相同(y1y2 等),因为这些将在最后 用于命名数据​​框中的列。

    dplyr 包中有一个函数,它获取数据帧列表并将它们作为列绑定在一起:

    library(dplyr)
    df <- bind_cols(ys)
    

    顺便说一句,这只有在每个值在列FARM 中出现的次数完全相同时才有效,因为数据框中的列必须具有相同的长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2011-04-30
      • 2016-03-24
      相关资源
      最近更新 更多