【问题标题】:How to remove lines from a data frame using another dataframe [duplicate]如何使用另一个数据框从数据框中删除行[重复]
【发布时间】:2019-03-14 10:06:41
【问题描述】:

虽然有很多结果,但似乎没有一个能回答我下面的问题: 我有两个数据框

df1 = data.frame(x= c("a1","b1","c1","d1","e1","f1"),y =  c("a2","b2","c2","d2","e2","f2"), z = 1:6)

df2 = data.frame(x = c("a1", "b1"), y = c("a2", "b2"))

他们回来了:

> df1
   x  y z
1 a1 a2 1
2 b1 b2 2
3 c1 c2 3
4 d1 d2 4
5 e1 e2 5
6 f1 f2 6


> df2
   x  y
1 a1 a2
2 b1 b2

我怎样才能得到他们的inner join的剩余部分,我的意思是我想得到:

   x  y z

1 c1 c2 3
2 d1 d2 4
3 e1 e2 5
4 f1 f2 6

我试过了

subset(df1, (df1<span class="math-container">$x %in% df2$</span>x) &amp; (df1<span class="math-container">$y %in% df2$</span>y))

但它不起作用也尝试了左连接,但我一直得到原始数据框 df1

【问题讨论】:

  • 你需要dplyr::anti_join(df1, df2)

标签: r dataset filter subset


【解决方案1】:

这是一个解决方案,它使用将第一列和第二列组合在一起然后使用%in% 函数组成的键。

df1 = data.frame(x= c("a1","b1","c1","d1","e1","f1"),y =  c("a2","b2","c2","d2","e2","f2"), z = 1:6)

df2 = data.frame(x = c("a1", "b1"), y = c("a2", "b2"))

#create a unique key for each dataframe
df1key<-paste(df1$x, df1$y)
df2key<-paste(df2$x, df2$y)

#return rows not matching rows in df2
answer<-df1[!(df1key  %in%  df2key),]

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多