排除数据框中与另一个数据框中的多个列值匹配的行

时间:2012-08-19 02:55:00

标签: r

DF1

   day  primer replicate count
011311     Arc        b1     0
011311    Bdnf        b1     0
011311    Bves        b1     0
011311     Crh        b1     0
011311    Egr1        b1     0

我有以下df1,并希望排除df2中与df1的引物和复制值相等的行。

DF2

primer exptname concentrate timepoints replicate  day     realConc
Acan      0hr        55mM          0        b1 011311 0.0002771494
Acan      0hr        55mM         20        b1 011311 0.0061298654
Acan      0hr        55mM         40        b1 011311 0.0015750373
Arc       0hr        55mM          0        b1 011311 0.0010109867
Arc       0hr        55mM         20        b1 011311 0.0035939088
Arc       0hr        55mM         40        b1 011311 0.0133760938

所以我想我的问题是我不知道怎么做2路比赛。然后排除这些值(在本例中为行)

我想要这个

new_df

primer exptname concentrate timepoints replicate  day     realConc
Acan      0hr        55mM          0        b1 011311 0.0002771494
Acan      0hr        55mM         20        b1 011311 0.0061298654
Acan      0hr        55mM         40        b1 011311 0.0015750373

我在想这样的事情:

new_df <- df2[!which(match(paste(df2$primer,df$replicate),paste(df1$primer,df$replicate))),]

显然不能正常工作

2 个答案:

答案 0 :(得分:2)

exclude<-!(paste(df2$primer,df2$replicate,sep='~')%in%paste(df1$primer,df1$replicate,sep='~'))
df2[exclude,]
#  primer exptname concentrate timepoints replicate   day     realConc
#1   Acan      0hr        55mM          0        b1 11311 0.0002771494
#2   Acan      0hr        55mM         20        b1 11311 0.0061298654
#3   Acan      0hr        55mM         40        b1 11311 0.0015750373

如果您不想使用粘贴,也可以使用

exclude<-!((df2$primer%in%df1$primer)&(df2$replicate%in%df1$replicate))

答案 1 :(得分:2)

这应该这样做:

  df2[ !df2$primer %in% df1$primer, ]
相关问题