如何将多个文本文件合并为一个data.frame?

时间:2015-10-11 18:55:23

标签: r for-loop dataframe

假设我在同一目录中有9个.txt文件。 price1.txt price2.txt price3.txt是来自不同位置的价格表,行和列名相应地是经度和高度。 year4,5,6.txt和dis7,8,9.txt是与text1中相同位置的年份和折扣表。

我想创建一个新的数据框,其中每列是一个价格,年份,文本1-9的折扣列表,具有相应的经度和态度。

我能够使用

$scala Factorial

Before recursive def: null
<function1>
java.lang.NullPointerException
  at Factorial$$anonfun$1.apply$mcII$sp(Example.scala:5)s

读取文件的名称

我能够使用

mydata = list.files(pattern = "\\.txt$") 

将每个文件放在一起。

但是如何从不同的可变文本文件中提取表并将它们放入列中?这里的困难部分是所有文件名都不同,所以我无法找出循环文件列表的简单方法。

1 个答案:

答案 0 :(得分:0)

考虑将价格,年份,光盘文本文件读入自己的数据框,然后合并:

pricelist <- list.files(pattern = "price-.*\\.txt")
pricedf <- lapply(pricelist, read.table, header=TRUE)

yearlist <- list.files(pattern = "year-.*\\.txt")
yeardf <- lapply(yearlist, read.table, header=TRUE)

disclist <- list.files(pattern = "disc-.*\\.txt")
discdf <- lapply(disclist, read.table, header=TRUE)

finaldf <- merge(pricedf, yeardf, by=c("longitude", "altitude"))
finaldf <- merge(finaldf, discdf, by=c("longitude", "altitude"))

对于for循环中的通用版本:

items <- c("price", "year", "disc")

for (item in items) {
   assign(paste0(item, "list"), list.files(pattern=paste0(item, "-.*\\.txt")))
   assign(paste0(item, "df"), lapply(get(paste0(item, "list")), read.table, header=TRUE))
}

finaldf <- merge(pricedf, yeardf, by=c("longitude", "altitude"))
finaldf <- merge(finaldf, discdf, by=c("longitude", "altitude"))