特定の列に基づいて、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)
あなたの考えを共有していただけませんか?
ありがとう
ほとんどすべてのdplyr
関数はtbls
で動作します(コンテキストに応じてdata.frame
、data.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