46

次の 2 つのデータ フレームがあります (例)。

df1:

name    profile    type    strand
A       4.5        1       +
B       3.2        1       +
C       5.5        1       +
D       14.0       1       -
E       45.1       1       -
F       32.8       1       -
G       19.9       1       +

df2:

name
A
B
C
G

以下を取得する行df1を削除したいと思います。df1$name = df2$name

出力:

name    profile    type    strand
D       14.0       1       -
E       45.1       1       -
F       32.8       1       -

最初は簡単に思えたのですが、昨日からめちゃくちゃにしています。

4

3 に答える 3

61

%in%オペレーターが必要です。そう、

df1[!(df1$name %in% df2$name),]

あなたが望むものをあなたに与えるべきです。

  • df1$name %in% df2$nameの値df1$namedf2$name
  • !演算子は結果を逆にします。
于 2013-06-27T08:37:24.717 に答える
40

これは時々anti-joinと呼ばれます:

library(dplyr)
anti_join(df1, df2, by = "name")
于 2016-12-29T00:33:27.567 に答える
3
df1[!(as.character(df1$jobId) %in% as.character(df2$name)), ]

キャラクターではなく要因であるas.characterため、実行に追加する必要がありました。これを直接変換することになってnameいませんか?%in%

于 2016-12-28T23:34:00.350 に答える