web-dev-qa-db-ja.com

別のデータフレームに存在する行を削除しますか?

次の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       -

使用するコードの一部を教えてくれる人がいれば大いに役立つでしょう。最初は簡単に思えましたが、昨日からそれを台無しにしています。

32
biohazard

%in%演算子が必要です。そう、

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

あなたが欲しいものを与える必要があります。

  • df1$name %in% df2$nameは、df1$nameの値がdf2$nameにあるかどうかをテストします
  • !演算子は結果を逆にします。
38
csgillespie

これはanti-joinと呼ばれることもあります:

library(dplyr)
anti_join(df1, df2, by = "name")
24
Hugh
df1[!(as.character(df1$jobId) %in% as.character(df2$name)), ]

nameは文字ではなく因子であるため、as.characterを実行に追加する必要がありました。 %in%はこれを直接変換することになっていないのですか?

1
user2635283