2015-10-11 145 views
0

假设我在同一个目录下有9个.txt文件。 price1.txt price2.txt price3.txt是来自不同位置的价格表,行和col的名称是相应的经度和高度。 year4,5,6.txt和dis7,8,9.txt是与text1中相同位置的年份和折扣表。如何将多个文本文件合并到一个data.frame中?

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

我能够使用

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

读取文件

我能使用的名称

a = lapply(mydata, read.table, header = TRUE) 

让每个文件放在一起。

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

回答

0

考虑阅读的价格,一年中,碟片的文本文件到自己的dataframes然后合并:

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")) 
+0

感谢您的帮助,但是怎么样通过()工作吗?我的经度和高度是第一行和第一列的数字列表,我还可以安排使用by()函数吗? – user3697665

+0

在[merge()](https://stat.ethz.ch/R-manual/R-devel/library/base/html/merge.html])中,'by'是数据框之间的连接列。如果两者都使用通用的'by'或'by.x'和'by.y'来表示特定的df。我不确定你的意思是第一行和第一列。是否有包含数据行的列标题?请编辑您的帖子以显示数据布局(只需从txt文件复制和粘贴样本并使用代码格式:{}')。 – Parfait

+0

谢谢!但第二个assign()似乎不适合读取。 table(),paste0(item,“list”)使文件名以“list”结尾,但read.table()无法识别该字符,当我手动输入变量时,read.table()会识别它。 – user3697665

相关问题