2016-10-24 11 views
0

列aとbが同じ値を持つ行を削除します。さらに、ユニークな行には、重複の最新の日付(列c)が含まれている必要があります。たとえば:特定の列と日付を参照してデータフレームから重複した行を削除するR

> a <- c(rep("A", 3), rep("B", 3), rep("C",2)) 
> b <- c(1,1,2,4,1,1,2,2) 
> c <- c("2016-10-01", "2016-10-02", "2016-10-03", "2016-10-04", "2016-10-04", "2016-10-05", "2016-10-06", "2016-10-07") 
> df <-data.frame(a,b,c) 
> df 
    a b   c 
1 A 1 2016-10-01 
2 A 1 2016-10-02 
3 A 2 2016-10-03 
4 B 4 2016-10-04 
5 B 1 2016-10-04 
6 B 1 2016-10-05 
7 C 2 2016-10-06 
8 C 2 2016-10-07 

私は、次のデータフレームを取得したい:ここ

a b   c 
1 A 1 2016-10-02 
3 A 2 2016-10-03 
4 B 4 2016-10-04 
5 B 1 2016-10-05 
6 C 2 2016-10-07 

は、私がこれまで試したものです:

> df[!(duplicated(df$a, df$b)| 
+   duplicated(df$a, df$b, fromLast=TRUE)),] 
    a b   c 
1 A 1 2016-10-01 
2 A 1 2016-10-02 
3 A 2 2016-10-03 
4 B 4 2016-10-04 
5 B 1 2016-10-04 
6 B 1 2016-10-05 
+2

この質問は、統計を行うには何も持っていないようですので、あなたは、スタックオーバーフローで尋ねたほうが良いと思います。つまり、あなたが探しているものは 'df [!duplicated(df [c(" a "、" b ")] fromLast = T)]' ' - あなたのデータはすでに'少なくとも任意の与えられた 'a、b'の組み合わせの中で、少なくとも" c "である。 – Gregor

+0

投稿しないでください。これは[SO]のトピックになりますので、お待ちいただければ移行いたします。これを削除することもできます。 – gung

答えて

1

あなたが最初にソートし、次にしたいと思います選択。

df <- df[ order(df[['c']]), ] 
small_df <- df[ !duplicated(df[c('a','b')], fromLast=TRUE)), ] 
0

あなたは、単に持つことができます。

df$c <- as.character(df$c) 
aggregate(c~a+b, df, max) 

    a b   c 
1 A 1 2016-10-02 
2 B 1 2016-10-05 
3 A 2 2016-10-03 
4 C 2 2016-10-07 
5 B 4 2016-10-04 
関連する問題