【发布时间】:2020-12-17 18:20:54
【问题描述】:
考虑这个数据框:
data <- data.frame(group = rep(letters[1:3], c(4,5,4)),
Date = as.Date(c("2010-08-09", "2010-09-11", "2010-09-12", "2010-09-18",
"2014-03-15","2014-03-16","2014-03-20","2014-03-21","2014-03-25",
"2016-05-02","2016-08-02","2016-08-03","2016-09-21")))
我们有三个小组,他们在不同的日期进行了观察。我想找到每个组的第一个和最后一个日期(最好使用dplyr)。日期如何做到这一点?
编辑:
我添加这个是为了澄清我询问的原因,这与 R 解释实时(日期)的能力有关。 data2 将与上面的 data 完全相同,但请注意我切换了前两个日期,因此 group==a 的观察不再按实际时间顺序排列(从最早到最新,相对于实时):
data2 <- data.frame(group = rep(letters[1:3], c(4,5,4)),
Date = as.Date(c("2010-09-11","2010-08-09", "2010-09-12", "2010-09-18",
"2014-03-15","2014-03-16","2014-03-20","2014-03-21","2014-03-25",
"2016-05-02","2016-08-02","2016-08-03","2016-09-21")))
因此,2010 年 9 月 11 日在 2010 年 8 月 9 日(实时)之后,但它们在数据框中的时间顺序不同。 现在如果我们这样做:
library(dplyr)
data2%>%group_by(group) %>% summarise(FirsDate=first(Date),LastDate=last(Date))
我们得到:
group FirsDate LastDate
<fct> <date> <date>
1 a 2010-09-11 2010-09-18
2 b 2014-03-15 2014-03-25
3 c 2016-05-02 2016-09-21
所以它返回了第一个和最后一个观察结果,而不是真正的时间顺序。
【问题讨论】: