4

特定の列のペア (または 2 つ以上のタプル) がデータ フレームにあるかどうかを確認する効率的な方法があるかどうかを知りたいです。

たとえば、次のデータ フレームがあるとします。

df=data.frame(c("a","b","c","d"),c("e","f","g","h"),c(1,0,0,1))
names(df)=c('col1','col2','col3')

  col1 col2 col3
1    a    e    1
2    b    f    0
3    c    g    0
4    d    h    1

そして、このテーブルに列のペアのリストが含まれているかどうかを確認したい、たとえば、(a,b)、(a,c)、(a,e)、(c,a)、(c,g)、(a 、f)

出力先:

FALSE FALSE TRUE FALSE TRUE FALSE

編集:混乱を避けるために新しいペア(a、f)を追加しました

列を文字列に連結してから%in%と比較することでこれを行うことを考えましたが、これは非常に非効率的です。dplyr のフィルターでループすることも考えましたが、テーブルが巨大で、フォーマットの変換 (つまり、数行の書き込み) が必要な場合は、かなりの時間がかかります。

Rでこれを達成する効率的な方法はありますか?

4

2 に答える 2

1

列の組み合わせがテーブルに含まれているかどうかのみを確認する必要がある場合はunique、比較の数を減らすために使用できます。

df=data.frame(c("a","b","c","d"),c("e","f","g","h"),c(1,0,0,1), stringsAsFactors=FALSE)
names(df)=c('col1','col2','col3')

df$to_check = paste(df$col1, df$col2, sep=',')
cols <- c("a,b", "a,c", "a,e", "c,a", "c,g")

cols %in% unique(df$to_check)
于 2015-07-24T15:09:16.247 に答える