我想合并名为data.frame
和df1
的2 df2
,因此我想从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
的第3行在X
和Y
匹配,我将其替换,因此我不必采取{ {1}}正在考虑中。
所以我的Z
会是这样的:
df
任何帮助都将不胜感激。
答案 0 :(得分:2)
我认为您只想在所需的列上使用rbind
或rbind.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
答案 1 :(得分: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
值和第二个表的值。然后我们清理临时列。