我想基于max(start_date)删除R中每个组的数据帧中的最后一行。
示例数据:
id start_date end_date
1 2016-01-14 2016-02-14
1 2016-03-14 2016-08-05
2 2014-01-14 2014-02-14
2 2015-03-21 2015-05-21
2 2015-08-23 2015-09-23
2 2015-11-21 2016-01-03
结果:
id start_date end_date
1 2016-01-14 2016-02-14
2 2014-01-14 2014-02-14
2 2015-03-21 2015-05-21
2 2015-08-23 2015-09-23
以下不起作用:
df <- df %>%
group_by(id) %>%
summarise(start_date != max(start_date))
错误:找到重复的列名:id
df <- sqldf("select * from df group by id having start_date != max(start_date)")
语句中的错误:重复的列名:id
任何建议都会很棒。
答案 0 :(得分:4)
我们可以使用slice
(假设日期已经订购)
df1 %>%
group_by(id) %>%
slice(-n())
# id start_date end_date
# <int> <chr> <chr>
#1 1 2016-01-14 2016-02-14
#2 2 2014-01-14 2014-02-14
#3 2 2015-03-21 2015-05-21
#4 2 2015-08-23 2015-09-23
如果未订购日期,则arrange
和slice
df1 %>%
group_by(id) %>%
arrange(start_date) %>%
slice(-n())
基于以前的一些基准测试(找不到链接),arrange/slice
方法会比比较start_date != max(start_date)