-1

Rに2列のデータフレームがあります。次のようなものだとしましょう

V1 V2
1 2
2 4
1 2
2 3
1 2
...

V1 の値が複数回出現し、共通の V1 値を持つこれらの行に異なる V2 値がある場合は、それらを除外します。

Rでこれを効率的に行うにはどうすればよいですか? ハッシュ機能を使用する必要があると思いますよね?しかし、どうすればよいかわかりません。

ありがとうございました。

4

2 に答える 2

1

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て、重複を省略した矛盾した行を表示します。

于 2013-07-03T23:31:11.377 に答える
0

問題仕様における不定代名詞の使用は、誤解を招きやすい。「それら」を「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} ), ]
于 2013-07-03T23:33:24.737 に答える