2016-07-28 15 views
1

で私はこのようになりますRでのデータセットがあります:列x1とx2の中の値に基づいて削除重複行R

x1 x2 x3 
1: A Away 2 
2: A Home 2 
3: B Away 2 
4: B Away 1 
5: B Home 2 
6: B Home 1 
7: C Away 1 
8: C Home 1 

を、私は重複行を削除します。私は、次のことを試してみました:

df[!duplicated(df[,c('x1', 'x2')]),] 

それは、データセット内のまだ存在する重複して、まったく同じデータを返すように、それは行4と6を削除する必要があります。しかし、残念ながら、それは動作しません。行4と行6を削除するにはどうすればよいですか?

+1

関連性は異なるが、http://stackoverflow.com/q/11792527/ – Frank

答えて

1
library("data.table") 
setDT(df)[, .SD[1], by = .(x1, x2)] 

#  x1 x2 x3 
# 1: A Away 2 
# 2: A Home 2 
# 3: B Away 2 
# 4: B Home 2 
# 5: C Away 1 
# 6: C Home 1 
0

またはあなたが使用できるdplyrライブラリ

library("dplyr") 
df <- data.frame(x1 = c("A","A","B","B","B","B","C","C"), x2 = c("Away","Home","Away","Away","Home","Home","Away","Home"), x3 = c(2,2,2,1,2,1,1,1)) 

distinct(df,x1,x2,.keep_all = TRUE) 
#  x1 x2 x3 
# 1 A Away 2 
# 2 A Home 2 
# 3 B Away 2 
# 4 B Home 2 
# 5 C Away 1 
# 6 C Home 1 
3

私はちょうどたい:あなただけの?uniqueを見たい場合は

unique(df, by=c("x1", "x2")) # where df is a data.table 

This'dは非常に明白でした。

PS:あなたの質問に構文があると、私はあなたがdata.tableとdata.frameの構文の基本的な違いを認識しているのだろうかと思います。最初にvignettesを読むことをお勧めします。