8

特定の列に基づいて、dataframe2 に存在しない dataframe1 に存在する行を識別したいと考えています。以下のコードを使用して、必要な情報を取得しました。

diffId <- anti_join(dat$ID,datwe$ID)

残念ながら、次のエラーが発生しました。

UseMethod("anti_join") のエラー:
クラス "factor" のオブジェクトに適用される 'anti_join' に適用可能なメソッドがありません

データフレーム と の両方で目的の列のクラスを確認しましたfactor。また、問題が解決する可能性があることを前提として、列を別の変数に分離しようとしましたが、うまくいきません!

fac1 <- datwe$ID
fac2 <- dat$ID
diffId <- anti_join(fac2,fac1)

あなたの考えを教えてください。

ありがとう

4

1 に答える 1

4

ほとんどすべてのdplyr機能が動作するためtbls(コンテキストに応じてdata.framedata.table、データベース接続など)、実際に必要なのは次のようなものです。

> dat <- data.frame(ID=c(1, 3, 6, 4), x=runif(4))
> datwe <- data.frame(ID=c(3, 5, 8), y=runif(3))
> anti_join(dat, datwe, by='ID') %>% select(ID)
  ID
1  4
2  6
3  1

順序は明らかに保持されないことに注意してください。

因子を (上記の例の数値とは異なり) 異なるレベルで使用する場合、 と の間factorで変換が行われcharacterます。

ベクトルを操作したい場合は、setdiff( と の両方baseで利用可能dplyr)を使用できます。

> setdiff(dat$ID, datwe$ID)
[1] 1 6 4
于 2015-06-04T08:27:32.983 に答える