2016-04-15 70 views
0

循環合併數據集我有1個基本文件(如下所示):作爲R

ID x1 
1 5 
2 20 
3 14 
4 8 
5 20 

我有1.000單獨的文件,每個包含額外的變量。兩個例子是:

ID x2 
1 45 
2 85 
3 42 
7 52 
8 41 


ID x2 
10 54 
12 4 
4 7 
5 21 

我想什麼得到它:

ID x1 x2 
1 5 45 
2 20 85 
3 14 42 
4 8 7 
5 20 21 

我只是想在「MYDATA」添加匹配ID。我最初嘗試將所有單獨的文件合併爲一個文件然後合併,但尺寸太大。我也嘗試在循環中合併,但是這不斷添加新的變量。有關如何合併的建議?

+1

在您的附加文件中,您的所有文件或ID之間是否有唯一的ID可以重複? – Batanichek

+0

附加文件全部具有唯一ID – research111

回答

1

根據您的解讀方式,您的數據會稍有不同。

但是,您可以使用apply讀取大量文件,並將它們分配到不同級別的列表中。

files.list = list() 
sapply(c(1:100), function(x){files.list[[x]] = read.csv(file = paste0("file_",x,".csv"))}) 

然後在列表中的每個對象是一個data.frame,你可以使用這個優秀的答案:

merged.data.frame = Reduce(function(...) merge(..., all=T), files.list) 

https://stackoverflow.com/a/8097519/4604054

+0

我收到以下錯誤「files.list [[x]] = read.table(file = paste0(」data [「,x,」] .txt「))中的錯誤):more提供的元素比替換「 我使用以下代碼:'sapply(c(1:100),function(x){files.list [[x]] = read.table(file = paste0(」data [「,x,」] .txt「))})' 在列表中我有642個文件,每個文件名爲」data [1]「,其中1的範圍是1到642 任何想法爲什麼? – research111

+0

除非我至少有2-3個要測試的文件,否則我真的無能爲力。這段代碼更多的是一個例子,它應該取決於你原來的數據。 – zacdav

0

沿着這或許真的?

m1 <- merge(baseTab, tab2, by = "ID") 

# Loop through datasets start here 
for (tabName in tabList) { 
    m2 <- merge(baseTab, tabName, by = "ID") 
    m1 <- rbind(m1, m2) 
} 
# and ends here