对于每个 ID,返回 r 中开始列的最早日期和结束列的最新日期
Posted
技术标签:
【中文标题】对于每个 ID,返回 r 中开始列的最早日期和结束列的最新日期【英文标题】:For each ID return the earliest date from the start column and the latest date from the end column in r 【发布时间】:2022-01-03 21:52:06 【问题描述】:我有一个数据集,其中每个 ID 都有多个开始日期和结束日期。我想从“startDate”列中获取最早的日期,从 endDate 列中获取最晚的日期。
data = data.frame(ID=c(1,1,1,1,2,2,2),
startDate= c("2018-01-31", "2018-01-31", "2018-01-31", "2019-06-06",
"2002-06-07", "2002-06-07", "2002-09-12"),
endDate = c(NA,NA,NA,"2019-07-09",NA,NA, "2002-10-02"))
这是我希望得到的输出:
data = data.frame(ID=c(1,2),
startDate= c("2018-01-31","2002-06-07"),
endDate = c("2019-07-09","2002-10-02"))
经过尝试,我已经通过以下代码弄清楚了如何做到这一点,但如果可能的话,我更喜欢更高效的方法。我一直需要这样做,我宁愿不必创建两个单独的数据框。谢谢大家的帮助!
data_start <- data %>%
group_by(ID) %>%
arrange(startDate) %>%
slice(1L)
data_end <- data %>%
group_by(ID) %>%
arrange(desc(endDate)) %>%
slice(1L)
data <- left_join(data_start[,c(1,2)], data_end[,c(1,3)], by="ID")
【问题讨论】:
【参考方案1】:或者用first
和last
:
library(dplyr)
data %>%
group_by(ID) %>%
summarise(
startDate = first(startDate),
endDate = last(endDate)
)
# A tibble: 2 x 3
ID startDate endDate
* <dbl> <chr> <chr>
1 1 2018-01-31 2019-07-09
2 2 2002-06-07 2002-10-02
【讨论】:
完美运行 - 非常感谢! 那么请考虑接受和/或支持该帖子【参考方案2】:您可以使用最小值和最大值,将变量用作日期
data %>% group_by(ID) %>%
summarise(startDate = min(as.Date(startDate),na.rm = T),
endDate = max(as.Date(endDate),na.rm = T))
【讨论】:
以上是关于对于每个 ID,返回 r 中开始列的最早日期和结束列的最新日期的主要内容,如果未能解决你的问题,请参考以下文章