假设我在同一目录中有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$")
将每个文件放在一起。
但是如何从不同的可变文本文件中提取表并将它们放入列中?这里的困难部分是所有文件名都不同,所以我无法找出循环文件列表的简单方法。
答案 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"))