从数据框中删除其列条目与另一个数据框的列重叠的行

时间:2013-04-04 13:17:51

标签: r dataframe duplicate-removal

我有两个带基因组数据的数据框,我需要删除数据框1中的所有行,其中“feature”列中的条目等于数据帧2的行中“feature”列中的条目。 / p>

df1 <- data.frame(feature=c("ENSG419","ENSG1617","ENSG1629","ENSG16230"),distance=c(9833,2460,50538,51162),origin=c("e2","e2","e2","e2"))
df2 <- data.frame(feature=c("ENSG4939","ENSG1617","ENSG5844","ENSG10292"),distance=c(8441,8970,10320,139),origin=c("etoh","etoh","etoh","etoh"))

> df1
    feature distance origin
1   ENSG419     9833     e2
2  ENSG1617     2460     e2
3  ENSG1629    50538     e2
4 ENSG16230    51162     e2
> df2
    feature distance origin
1  ENSG4939     8441   etoh
2  ENSG1617     8970   etoh
3  ENSG5844    10320   etoh
4 ENSG10292      139   etoh

我想得到这个:

    feature distance origin
1   ENSG419     9833     e2
2  ENSG1629    50538     e2
3 ENSG16230    51162     e2

我尝试通过将两个数据帧绑定到新数据帧并随后提取具有相同新数据帧功能的行来删除重复条目。现在我想从原始数据框1中删除所述行。

df_new <- rbind(df1,df2)
df_new[duplicated(df_new[,1]),]

它没有完全奏效,无论如何我确信有更好的解决方案。我会非常感谢任何建议!

2 个答案:

答案 0 :(得分:3)

试试这个:

df1[!df1$feature %in% df2$feature, ]

答案 1 :(得分:2)

我会从两者中提取特征,对集合进行差异,然后根据结果对第一个数据帧进行子集化。

only1 <- setdiff(df1$feature, df2$feature)
df_sel <- df1[df1$feature %in% only1]

但我同意Arun的解决方案是一个oneliner:)