Rに2列のデータフレームがあります。次のようなものだとしましょう
V1 V2
1 2
2 4
1 2
2 3
1 2
...
V1 の値が複数回出現し、共通の V1 値を持つこれらの行に異なる V2 値がある場合は、それらを除外します。
Rでこれを効率的に行うにはどうすればよいですか? ハッシュ機能を使用する必要があると思いますよね?しかし、どうすればよいかわかりません。
ありがとうございました。
1)これを試してください:
DF <- data.frame(V1 = c(1L, 2L, 1L, 2L, 1L), V2 = c(2L, 4L, 2L, 3L, 2L))
is.ok <- function(x) var(range(x)) == 0
subset(DF, ave(V2, V1, FUN = is.ok) == 1)
最後の行の結果は次のとおりです。
V1 V2
1 1 2
3 1 2
5 1 2
一貫性のあるデータではなく、一貫性のないデータを取得するには、最後のコード行で に変更== 1
します。== 0
2)重複を表示したくない場合は、一貫した行が表示されますが、重複はありません。
subset(unique(DF), ave(V2, V1, FUN = length) == 1)
これは与える:
V1 V2
1 1 2
代わりに、コード内の を変更== 1
し> 1
て、重複を省略した矛盾した行を表示します。
問題仕様における不定代名詞の使用は、誤解を招きやすい。「それら」を「V1 の値が V2 の複数の値に関連付けられている行のすべてのインスタンス」として解釈し、「フィルター」が解釈されて、検査のために data.frame でそれらを配信するコードを示しています。
more.than.one.V2 <- dfrm[ave(dfrm$V2, dfrm$V1,
FUN=function(x){length(unique(x))!=1} ), ]
only.one.V2 <- dfrm[ave(dfrm$V2, dfrm$V1,
FUN=function(x){length(unique(x))==1} ), ]