跟踪两个数据帧之间的观察变化的内容和方式

时间:2015-03-05 20:36:01

标签: r

我有以下数据:

x <- c("aaa", "bbb", "ccc", "ddd", "eee")
y <- c(1, 0, 0, 1, 1)
df1 <- data.frame(x,y)
x <- c("aaa", "bbb", "ccc", "ddd", "eee")
y <- c(1, 1, 1, 1, 0)
df2 <- data.frame(x,y)

结构:

> df1
    x y
1 aaa 1
2 bbb 0
3 ccc 0
4 ddd 1
5 eee 1
> df2
    x y
1 aaa 1
2 bbb 1
3 ccc 1
4 ddd 1
5 eee 0

我想跟踪df1df2之间的变化。

如果我anti_join(df2,df1)我可以保留已经发生变化的事情:

x   y
eee 0
ccc 1
bbb 1

但我想知道什么,以及从df1df2的情况如何变化。例如:

x   y.from  y.to
eee 1       0
ccc 0       1
bbb 0       1

提前致谢。

4 个答案:

答案 0 :(得分:4)

你可以尝试

index<-(df1$y!=df2$y)
cbind(df1[index,], df2[index,"y"])

答案 1 :(得分:3)

试试这个:

#merge on column x
df3 <- merge(df1,df2,by="x")

#show the change
df3[ df3[,2] != df3[,3],]
#     x y.x y.y
# 2 bbb   0   1
# 3 ccc   0   1
# 5 eee   1   0

答案 2 :(得分:3)

这是类似的data.table方法

library(data.table)
setkey(setDT(df1), x)
df1[df2][y != i.y]
#      x y i.y
# 1: bbb 0   1
# 2: ccc 0   1
# 3: eee 1   0

答案 3 :(得分:0)

小猪退出@ zx8754这是一个使用dplyr的hacky filter()版本:

library(dplyr)
df3 <- merge(df1,df2,by="x") %>%
       filter(y.x != x.x)

#     x y.x y.y
# 2 bbb   0   1
# 3 ccc   0   1
# 5 eee   1   0