【问题标题】:rename imported datasets inside R function在 R 函数中重命名导入的数据集
【发布时间】:2017-06-07 12:49:42
【问题描述】:

我正在导入大约 140 个大型数据集。我正在尝试构建一个函数来导入这些数据集并使用 QQYYYY(季度,年份)标识符重命名它们。到目前为止,我拥有的(简化的)代码如下:

orig.first <- 'hist.dta_'
file.type <- '.txt'

clean.data <- function(qqyyyy) {
data.file <- paste(orig.first,qqyyyy,file.type,sep="")
origfile_ <<- read.table(data.file, sep="|", header=FALSE, 
colClasses=origclass, quote="")
}

目前,这可以全局导入数据集“hist.dta_Q11999.txt”,但是,它将使用名称“origfile_”导入它。我想将 Q11999(代表 1999 年第一季度)连接到 origfile_ 上,使其变为“origfile_Q11999”。有人可以让我知道实现这一目标的干净方法吗?

【问题讨论】:

  • 在全局命名空间中创建黑客对象通常会导致您希望永远不会踏入的深邃黑暗的道路。您是否有不想将它们读入列表或单独环境的原因?
  • 我不知道那些深邃的黑暗道路的尽头是什么;你会如何建议这样做?我计划将这些数据集连接成一个大型时间序列数据集进行分析。
  • 所以您确实想将它们读入列表然后处理该列表,可能使用do.call(rbind, yourlistname)。 SO上有很多已回答的问题演示了如何做到这一点,我和hrbrmstr都厌倦了回答或搜索它们,所以我们认为你应该先努力搜索。
  • 关于 SO 的文章几乎不计其数,用于迭代文件并绑定到一个巨大的数据框。这里有两个例子github.com/hrbrmstr/rstudioconf2017#research
  • 阅读 gregor 在this post 上的回答,了解如何处理 data.frames 列表。阅读this post 以高效读取文件。

标签: r function import


【解决方案1】:

正如其他人已经建议的那样,这里有一个解决方案如何将所有数据连接到一个数据帧:

quarters <- c("Q11999") # append here other quarters or generate somehow

origData <- lapply(quarters, function(qqyyyy) {
data.file <- paste(orig.first,qqyyyy,file.type,sep="")
origfile <<- read.table(data.file, sep="|", header=FALSE, colClasses=origclass, quote="")
origfile$quarter <- qqyyyy
return(origfile)
})
origData <- do.call(rbind, origData)

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 2021-11-13
    • 2014-05-30
    • 2021-03-16
    • 1970-01-01
    • 2012-05-26
    • 2021-11-03
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多