6

4つの異なる列に重複する情報があるデータの行を削除したいデータセットがあります。

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は次のようになります。

  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-6列に基づいてデータが重複している行を削除します。したがって、すべてのY変数がまったく同じであることに基づいて、適切に実行された場合、行4と1のみが削除されます。その複数列の条件。

私は近くにいると思いますが、正しく機能していません。

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

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

私はどちらかを考えましたが、イムは今や圧倒されて負けました。私はfooが次のようになることを期待します:

   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
4

3 に答える 3

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
于 2012-09-14T13:34:45.707 に答える
2
foo[apply(foo, 1, function(x) any(x != x[1])),]
于 2012-09-14T13:27:51.603 に答える
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
于 2012-09-14T13:29:14.830 に答える