我想根据 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
Result:
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
任何建议都会很棒。
我们可以用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
and slice
df1 %>%
group_by(id) %>%
arrange(start_date) %>%
slice(-n())
根据之前的一些基准测试(找不到链接),arrange/slice
方法会比比较更快start_date != max(start_date)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)