2016-10-07 8 views
0

同じ要素を持つすべてのグループの最後のエントリを削除してデータを消去したいと考えていました。データフレーム内のグループの最後のエントリを削除

type 2 3 
1 A 2.3 4 
2 A 3.4 5 
3 B 5.5 6 
4 B 6 7 
5 B 3 7 
6 C 5 6 
.... 

すなわち:

私のデータはいくらか次のようになります。私は同じタイプのすべてのグループの最後のエントリを取り除こうとしているので、このようになります。

type 2 3 
1 A 2.3 4 
2 B 5.5 6 
3 B 6 7 
4 C 5 6 

私の実際のデータは、それぞれのタイプごとに長さが異なり、通常は数百を超えます。私はgroup_byを考えてlast()を考えましたが、それはsummarizeとしか動作していないようです。何か案が?

+0

あなたは '' DF%>%GROUP_BY(タイプ)%>%スライス(-n())を使用することができ、あなたは(上記の 'C'のような)グループ内の単一の行を持っている場合も、それは意志削除されます。あなたが好きなら 'ifelse'でそれを回避することができます。 – alistaire

答えて

1

dplyr持つ別のオプションです。 'type'でグループ化した後、ローの数が1(n()==1)の場合、ローのシーケンス(row_number())がローの数(n() - 最後のローの数にも一致)または|と等しくないことを確認します。 )。したがって、基本的には、論理インデックス(row_number() !=n())を作成して最後の行を削除しますが、例外は1行しかない場合(n()==1)です。

library(dplyr) 
df1 %>% 
    group_by(type) %>% 
    filter(row_number()!=n()|n()==1) 
# type `2` `3` 
# <chr> <dbl> <int> 
#1  A 2.3  4 
#2  B 5.5  6 
#3  B 6.0  7 
#4  C 5.0  6 
+0

それは私が考える作品!あなたは 'filter(row_number()!= n()| n()== 1' '? – Samantha

+0

@Samantha私はいくつかの説明で投稿を更新しました。 – akrun

2

datがデータフレームとする、あなたはduplicated(, fromLast = TRUE)が後方に重複するものを見つけます

dat[duplicated(dat$type, fromLast = TRUE), ] 

を使用することができます。ここで


set.seed(0) 
dat <- data.frame(type = sort(sample(LETTERS[1:4], 12, TRUE)), x = 1:12) 

# type x 
#1  A 1 
#2  A 2 
#3  A 3 
#4  B 4 
#5  B 5 
#6  C 6 
#7  C 7 
#8  C 8 
#9  D 9 
#10 D 10 
#11 D 11 
#12 D 12 

dat[duplicated(dat$type, fromLast = TRUE), ] 

# type x 
#1  A 1 
#2  A 2 
#4  B 4 
#6  C 6 
#7  C 7 
#9  D 9 
#10 D 10 
#11 D 11 
+0

私の実際のデータは、2つではなくそれぞれのタイプごとに異なる長さを持っています。 – Samantha

+0

私は試しましたが、それぞれのタイプの最後のものを取り除く代わりに、各タイプの最初のエントリだけが残っているようです。 – Samantha

+0

まだ動作しませんでした:( – Samantha

関連する問題