2014-05-23 37 views
0

我想合併2層data.frame的named df1df2,所以我想從df2採取行並將它們添加在df1如果從2分特定的列值匹配,否則,我保留df1的行。換句話說,我不想重複數據。這裏有一個例子,從一個長data.frame S:合併兩個數據幀的條件

df1 <- data.frame(
    X = c(18,20,21,27,50), 
    Y = c(4,5,6,9,8), 
    Z = c(1,0.3,0.4,0.7,0.9) 
) 

df2 <- data.frame(
    X = c(20,40,50,), 
    Y = c(1,4,8), 
    Z = c(2.2,0.3,0.6) 
) 

由於從df1行5和df2比賽中XY第3排,我更換了,所以我沒有把Z考慮。

所以我df會是這樣的:

> mergedf 
    X Y Z 
1 18 4 1.0 
2 20 5 0.3 
3 21 6 0.4 
4 27 9 0.7 
5 50 8 0.9 #The row from df1 instead of df2 
6 20 1 2.2 
7 40 4 0.3 

任何幫助,將不勝感激。

回答

1

我覺得你只是想在所需的列rbindrbind.data.frame,然後unique,並使用這些rownames指數:

df3 <- rbind.data.frame(df1, df2) 
df3[rownames(unique(df3[, -3])), ] 

## X Y Z 
## 1 18 4 1.0 
## 2 20 5 0.3 
## 3 21 6 0.4 
## 4 27 9 0.7 
## 5 50 8 0.9 
## 6 20 1 2.2 
## 7 40 4 0.3 
+0

非常感謝您的幫助! – Simplytif

1

這應該工作

mm<-merge(df1, df2, all=T, by=c("X","Y")) 
mm<-transform(mm, 
    Z=ifelse(is.na(Z.x), Z.y, Z.x), 
    Z.x=NULL, 
    Z.y=NULL) 
mm 
# X Y Z 
# 1 18 4 1.0 
# 2 20 1 2.2 
# 3 20 5 0.3 
# 4 21 6 0.4 
# 5 27 9 0.7 
# 6 40 4 0.3 
# 7 50 8 0.9 

在這裏,我們從合併所有值兩個數據集,然後我們填寫第一個表中缺少的Z值與第二個表中的值。然後我們清理臨時列。

+0

這是一個很好的幫助,謝謝 – Simplytif