【问题标题】:Merging files (and file names) in R在 R 中合并文件(和文件名)
【发布时间】:2013-06-28 16:28:54
【问题描述】:

我正在尝试使用 R 合并一个充满逗号分隔文本文件的目录,同时还将每个文件的文件名合并为数据集中的新变量。

我一直在使用以下内容:

library(plyr)
file_list <- list.files()
dataset <- ldply(file_list, read.table, header=FALSE, sep=",")

谁能解释我如何为每个读取的文件添加文件名作为数据集中的新变量?

非常感谢,

-乔恩

【问题讨论】:

  • 第1步:你能不能写一个函数,接受一个文件名(路径),然后读入文件并添加适当的列?第 2 步:在 ldply 中使用该函数。

标签: r file plyr


【解决方案1】:

您可以在 read.table() 函数周围创建一个包装器,该函数会添加到您的文件名变量中。像这样的东西应该可以工作:

read.data <- function(file){
  dat <- read.table(file,header=F,sep=",")
  dat$fname <- file
  return(dat)
}

您只需在数据文件中应用该功能即可。由于您没有发布任何示例数据,我不确定它实际上是什么样子,但现在我假设它是干净的并且rbind() 足以将它们连接在一起,在这种情况下,这个示例应该说明该功能的实际作用:

> data(iris)
> write.csv(iris,file="iris1.csv",row.names=F)
> write.csv(iris,file="iris2.csv",row.names=F)
> dataset <- do.call(rbind, lapply(list.files(pattern="csv$"),read.data))
> head(dataset)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species     fname
1          5.1         3.5          1.4         0.2  setosa iris1.csv
2          4.9         3.0          1.4         0.2  setosa iris1.csv
3          4.7         3.2          1.3         0.2  setosa iris1.csv
4          4.6         3.1          1.5         0.2  setosa iris1.csv
5          5.0         3.6          1.4         0.2  setosa iris1.csv
6          5.4         3.9          1.7         0.4  setosa iris1.csv
> table(dataset$fname)

iris1.csv iris2.csv 
      150       150 

【讨论】:

  • 大卫,谢谢您 - 您的解决方案运行良好。现在我只需要弄清楚它是如何工作的......
  • 不客气 - 如果有任何部分令人困惑,请告诉我,我很高兴详细说明发生了什么。您的原始帖子中已经包含了大约 90% 的解决方案,因此,如果您了解它不应该接受更多内容。另外,如果此答案对您有用,请点击接受答案按钮。
猜你喜欢
  • 1970-01-01
  • 2014-10-14
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多