2017-09-26 78 views
1

我知道如何比较两个dataframes:比较两个数据帧和更新列

setdiff(df1,df2) 

不过是有没有去比较一列,如果是不同的,更新的价值。因此,在DF1说我有

A | B 
------- 
a | 3 
b | 7 
c | 8 

而在DF2我有

A | B 
------- 
a | 3 
b | 10 
c | 8 

有没有办法有值的变化(B已变为10)被应用到DF1?

+0

所以你想要'df1 $ B'和'df2 $ B'是一样的吗? – useR

+0

是的,但我不想只是将整行复制回来我想能够确切地知道哪些条目是不同的,所以响应会告诉我行b从7更改为10,然后我可以将df1更新为是相同的。如果那有意义的话。 – Niall

回答

1

你可以只是这样做:

df1 = data.frame(A = c("a", "b", "c"), 
       B = c(3, 7, 8)) 

df2 = data.frame(A = c("a", "b", "c"), 
       B = c(3, 10, 8)) 


diff_index = which(df1$B != df2$B) 
df1$B[diff_index] = df2$B[diff_index] 

diff_index提取其中df1$B不等于df2$B,然后使用该索引来代替df1$B有什么在df2$B

+0

谢谢你的作品 – Niall

0

DF1 = data.frame指标(一=字母[1:3],b = c(3,7,8))

df2 = data.frame(a = letters [1:3],b = c(3,10,8))

df1$b[!(df1$b %in% df2$b)]=df2$b[!(df1$b %in% df2$b)] 
+0

这与设置'df1 $ B = df2 $ B'相同,因为你不知道哪行被修改。 – useR