2015-10-11 180 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

相關問題