2014-04-08 36 views
-3

您好我想合併3個dataframes這樣的:如何合併R 3中數據幀

df1 
    A B 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
5 5 1 

df2 
    C D 
1 NA NA 
2 NA NA 
3 3 8 
4 4 9 
5 5 1 
6 8 9 
7 1 2 

df3 
    E F 
1 NA NA 
2 NA NA 
3 5 6 
4 4 9 


merged dataframe : 

    A B C D E F 
1 1 6 NA NA NA NA 
2 2 7 NA NA NA NA 
3 3 8 3 8 NA NA 
4 4 9 4 9 NA NA 
5 5 1 5 1 NA NA 
6 NA NA 8 9 NA NA 
7 NA NA 1 2 NA NA 
8 NA NA NA NA 5 6 
9 NA NA NA NA 4 9 

的事情是我怎麼能這3個dataframes之間的合併沒有鬆動的值,如果有一個函數R中誰做,因爲我做了很多與合併功能操作,但沒有奏效
u能幫助我,謝謝

file1 <- paste("C:\\df1.csv") 
table1 <- read.table(file1,sep=",",header=T,fill=TRUE) 

file2 <- paste("C:\\df2.csv") 
table2 <- read.table(file2,sep=",",header=T,fill=TRUE) 

file3 <- paste("C:\\df3.csv") 
table3 <- read.table(file3,sep=",",header=T,fill=TRUE) 
d2<-table3[5:nrow(table3),] 
for(i in 1:4) { d2 <- rbind(rep(NA, ncol(table3)), d2) } 
row.names(d2) <- 1:nrow(d2) 
d3<-table1[10:nrow(table1),] 
for(i in 1:9) { d3 <- rbind(rep(NA, ncol(table1)), d3) } 
row.names(d3) <- 1:nrow(d3) 


temp_merge <-merge(d3, d2,by=0, all = TRUE) 
temp_merge <- temp_merge[,-1] 

final_merge <- merge(table2,temp_merge, by=0, all=TRUE) 
row.names(final_merge) <- 1:nrow(final_merge) 
final_merge <- final_merge[,-1] 
+0

這裏「合併」的規則是什麼? – A5C1D2H2I1M1N2O1R2T1

+0

'cbind()'可用於綁定data.frames togehter - 但這需要它們具有相同數量的行。在你的例子中,我不明白爲什麼額外的'NA's被添加到df2的底部,但是在df3的頂部。 –

+0

請向我們展示您嘗試過的代碼並解釋它爲什麼不符合您的需求。您似乎通過行名稱('by = 0')合併了df1和df2。但'添加'df3的規則尚不清楚。沒有[類似的帖子對我有幫助嗎?](http://stackoverflow.com/search?q= [r] +合併+許多+多個+數據+框架)。如果不是,爲什麼? – Henrik

回答

1

有了:merge(x, y, by = intersect(names(x), names(y)), all = TRUE) 所有值會保持不變,是行只是在一個數據。框架充滿NA。

a <- data.frame(a=1:10, b=10:1) 
a <- cbind(rn=1:nrow(a),a) 
c <- data.frame(d=5:15, e=15:5) 
c <- cbind(rn=(1+5):(nrow(c)+5),c) 
d <- data.frame(a=1:3, rn=5:7) 
ac <- merge(a,c, by.x="rn", by.y="rn", all=T) 
acd <- merge(ac,d, by.x="rn", by.y="rn", all=T) 
+0

@Jullian,謝謝你的回答,但是不行,你可以看到我的代碼可能有問題 – foboss

+0

'by = 0'正在產生問題。如果你有roindices,使用它們,否則用'cbind'加上它們: 'a < - data.frame(a = 1:10,b = 10:1) a <-cbind(rn = 1:nrow(a), a) c < - data.frame(d = 5:15,e = 15:5) c <-cbind(rn =(1 + 5):(nrow(c)+5)c) d < - data.frame(a = 1:3,rn = 5:7) acd < - merge(a,c,by.x =「rn」,by.y =「rn」,all = - 合併(ac,d,by.x =「rn」,by.y =「rn」,all = T)' – Julian

+0

@ Jullian,非常感謝,它的作品(y) – foboss