我注意到在R中編程時我經常遇到這個任務,但我不認爲我將它實現爲「漂亮」。將來自不同文件的數據彙總到數據結構中
我得到一個文件名列表,每個文件名都包含一個表格或一個簡單的矢量。我想將所有文件讀入一些構造(表列表?),以便稍後可以用簡單的循環操縱它們。
我知道如何將每個文件讀入表格/矢量,但我不知道如何將所有這些對象放在一個結構(列表?)中。
無論如何,我想這是非常例行的,所以我會很樂意聽到你的技巧。
我注意到在R中編程時我經常遇到這個任務,但我不認爲我將它實現爲「漂亮」。將來自不同文件的數據彙總到數據結構中
我得到一個文件名列表,每個文件名都包含一個表格或一個簡單的矢量。我想將所有文件讀入一些構造(表列表?),以便稍後可以用簡單的循環操縱它們。
我知道如何將每個文件讀入表格/矢量,但我不知道如何將所有這些對象放在一個結構(列表?)中。
無論如何,我想這是非常例行的,所以我會很樂意聽到你的技巧。
,或在不plyr
:
filenames <- c("file1.txt", "file2.txt", "file3.txt")
mydata <- array(list(NULL))
for (i in 1:length(filenames))
{
mydata[[i]] <- read.table(filenames[i])
}
+1不錯,簡單! – 2010-08-06 15:51:41
但更好地預先分配列表,並且可能使用文件名:mydata < - vector(「list」,length(filenames));名稱(mydata)< - 文件名; ... mydata [[filenames [i]]] < - read.table(filenames [i]) – mdsumner 2010-08-08 22:23:14
@mdsumner:預分配的優點是什麼?另外,通過這種方式,你可以將'read.table'語句放在一個'tryCatch'指令中,所以如果文件不存在/被破壞等,你最終會在'mydata'中得到一個NULL值,然後可以對它進行檢查在腳本 – nico 2010-08-09 06:55:18
是否所有的文件都有相同的列數?如果是這樣,我認爲這應該工作,把他們都放入一個數據框。
library(plyr)
x <- c(FILENAMES)
df <- ldply(x, read.table, sep = "\t", header = T)
如果他們不都相同的列,然後用llply()
代替
+1有時他們這樣做。謝謝! – 2010-08-06 15:52:00
即使文件沒有相同數量的列,這也可以工作。 – hadley 2010-08-06 23:51:11
這真的是一個謝恩重複問題下面指出:http://stackoverflow.com/questions/2209258/merge-several-data-frames-into-one-data-frame-with-a-loop/2209371#2209371 – 2010-08-06 16:18:33