R删除每个组的数据帧中的最后一行

时间:2016-08-12 11:16:43

标签: r

我想基于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

任何建议都会很棒。

1 个答案:

答案 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

如果未订购日期,则arrangeslice

df1 %>%
   group_by(id) %>%
   arrange(start_date) %>%
   slice(-n()) 

基于以前的一些基准测试(找不到链接),arrange/slice方法会比比较start_date != max(start_date)

更快