【问题标题】:R merge in loopR合并循环
【发布时间】:2018-10-27 11:30:16
【问题描述】:

我有很多 csv 文件要读取,然后与更大的文件合并(每个文件单独合并)。所以我写了这个函数来读取文件(作品):

read <- function(x) {
    read.csv(paste("StringCount_Length=", x, ".csv", sep = ""), header=TRUE, sep=",")
}

现在我想遍历文件,读取并合并它们。但是,合并不起作用给我这个错误消息:

fix.by(by.x, x) 中的错误:“by”必须指定唯一有效的列

如果我将特定文件放在合并命令中,我不会收到错误消息,所以我的错误一定存在,但我不太清楚哪里出错了。 将不胜感激任何帮助或建议!

for (x in c(2:5)) { 
  assign(paste("data", x, sep=""), read(x))
  assign(paste("data_total_",x, sep=""), merge(paste("data", x, sep=""),    data_old, by="Subject"))
}

【问题讨论】:

  • 变量名可能有错别字?您确定变量Subject 存在于每个数据集中吗?
  • 这也是我的第一个想法,但似乎没问题。当我用数据文件替换粘贴语句时它工作正常
  • 此外,您可能需要考虑使用 data.tables 列表,并使用 Reduce 将它们组合起来,如 answer 中所述。

标签: r loops merge


【解决方案1】:

与将对象分配给名称字符串的 assign 函数类似,您需要使用 get 函数在其中使用名称字符串调用对象对象而不是直接使用对象名称。

下面的代码应该完成我们用 get 函数封装粘贴函数的工作。

例如对于 x = 2,将通过 get("data2") 函数调用访问 data2 数据帧

for (x in c(2:5)) { 
  assign(paste("data", x, sep=""), read(x))
  assign(paste("data_total_",x, sep=""), 
  merge(get(paste("data", x, sep="")),    data_old, by="Subject"))
    }

【讨论】:

    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多