Reputation: 163
How would one go about removing the last row by group by column if it has a larger value than its previous column value?
Example:
Dataframe:
Column 1 Column 2
Dog 5
Dog 6
Dog 5
Cat 3
Cat 5
Cat 4
Cat 7
Mule 2
Mule 4
Mule 6
Mule 8
Mouse 4
Mouse 6
Mouse 9
I would like it to appear as:
Dataframe:
Column 1 Column 2
Dog 5
Dog 6
Dog 5
Cat 3
Cat 5
Cat 4
Mule 2
Mule 4
Mule 6
Mouse 4
Mouse 6
Only the group dog would remain the same in this situation as the last row value in column 2 for that group is smaller than its previous row.
Upvotes: 1
Views: 260
Reputation: 388982
One way with slice
can be :
library(dplyr)
df %>%
group_by(Column1) %>%
slice(if(last(Column2) > nth(Column2, n() - 1))
seq_len(n() - 1) else seq_len(n()))
# Column1 Column2
# <fct> <int>
# 1 Cat 3
# 2 Cat 5
# 3 Cat 4
# 4 Dog 5
# 5 Dog 6
# 6 Dog 5
# 7 Mouse 4
# 8 Mouse 6
# 9 Mule 2
#10 Mule 4
#11 Mule 6
Upvotes: 1
Reputation: 39858
One dplyr
option could be:
df %>%
group_by(Column1) %>%
filter(!(1:n() == max(1:n()) & Column2 > lag(Column2)))
Column1 Column2
<chr> <int>
1 Dog 5
2 Dog 6
3 Dog 5
4 Cat 3
5 Cat 5
6 Cat 4
7 Mule 2
8 Mule 4
9 Mule 6
10 Mouse 4
11 Mouse 6
Upvotes: 1