2012-09-14 16 views
6

データセットがあります。4つの異なる列に重複した情報を持つデータの行を削除したいと考えています。複数の列の条件に基づいて重複した行を削除します。

g1 v1 v2 y1 y2 y3 y4 y5 y6 
1 1 7 a y y y y y y 
2 0 5 b c y c y w c 
3 0 4 x f y c f f f 
4 1 4 x f f f f f f 
5 1 3 e w c w c w w 

は今、私はY1-6columnsに基づいてデータを複製した任意の行を削除する:

foo<- data.frame(g1 = c("1","0","0","1","1"), v1 = c("7","5","4","4","3"), v2 = c("a","b","x","x","e"), y1 = c("y","c","f","f","w"), y2= c("y","y","y","f","c"), y3 = c("y","c","c","f","w"), y4= c("y","y","f","f","c"), y5=c("y","w","f","f","w"), y6=c("y","c","f","f","w")) 

fooが、その後のように見えます。したがって、すべてのY変数がまったく同じに基づいて、正しく実行されると、行4と1だけが削除されます。その複数の列の状態。

私は近くにいると信じていますが、正しく動作していません。

私は試しました:new = foo[!(duplicated(foo[,1:6]))] 重複したコマンドを使用して検索し、正確に一致するコマンドのみを検索することを考えましたか?

私は&で条件文を使用することを考えましたが、それを行う方法もわかりません。
new = foo[foo$y1==foo$y2|foo$y3|foo$y4|foo$y5|foo$y6]

私は今考えましたが、今私は圧倒され、失われました。

これまで
g1 v1 v2 y1 y2 y3 y4 y5 y6 
2 0 5 b c y c y w c 
3 0 4 x f y c f f f 
5 1 3 e w c w c w w 

答えて

10
> foo[apply(foo[ , paste("y", 1:6, sep = "")], 1, 
      FUN = function(x) length(unique(x)) > 1), ] 
    g1 v1 v2 y1 y2 y3 y4 y5 y6 
2 0 5 b c y c y w c 
3 0 4 x f y c f f f 
5 1 3 e w c w c w w 
+1

私のお気に入り:私は、fooはのように見えることを期待します。 –

+0

私は情報のより多くの列を持っているので私は簡単な私の例を私はお詫びします...変数1-6だけに基づいて9つの情報の列を言う。私は上記の例を編集します – Kerry

+0

私は自分の答えを更新しました。ここで、行の選択は列y1〜y6に基づいています。 –

2
foo[apply(foo, 1, function(x) any(x != x[1])),] 
1
> foo[ !rowSums(apply(foo[2:6], 2, "!=", foo[1]))==0, ] 
    y1 y2 y3 y4 y5 y6 
2 c y c y w c 
3 f y c f f f 
5 w c w c w w 

> foo[ ! colSums(apply(foo, 1, duplicated, foo[1])) == 5, ] 
    y1 y2 y3 y4 y5 y6 
2 c y c y w c 
3 f y c f f f 
5 w c w c w w 
関連する問題