我有2个数据框df1
and df2
.
df1 <- data.frame(c1=c("a","b","c","d"),c2=c(1,2,3,4) )
df2 <- data.frame(c1=c("c","d","e","f"),c2=c(3,4,5,6) )
> df1
c1 c2
1 a 1
2 b 2
3 c 3
4 d 4
> df2
c1 c2
1 c 3
2 d 4
3 e 5
4 f 6
我需要对这两个数据帧执行设置操作。我用了merge(df1,df2,all=TRUE)
and merge(df1,df2,all=FALSE)
方法获取这些数据帧的并集和交集并得到所需的输出。获取这些数据帧的负值的函数是什么,即一个数据帧上存在的所有位置,而另一个数据帧上不存在?我需要以下输出。
c1 c2
1 a 1
2 b 2
我记得遇到过这个exact几个月前的问题。设法筛选了我的 Evernote 俏皮话。
注意:这是not我的解决方案。功劳归于写它的人(我目前似乎找不到他)。
如果你不担心rownames
那么你可以这样做:
df1[!duplicated(rbind(df2, df1))[-seq_len(nrow(df2))], ]
# c1 c2
# 1 a 1
# 2 b 2
Edit: A data.table
解决方案:
dt1 <- data.table(df1, key="c1")
dt2 <- data.table(df2)
dt1[!dt2]
或更好的单行代码(从 v1.9.6+ 开始):
setDT(df1)[!df2, on="c1"]
这将返回中的所有行df1
where df2$c1
不匹配df1$c1
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)