r - 如何在 R 中创建一个新的数据框,它结合了每个 ID 可用的第一个日期和最后一个日期?
问题描述
例如,假设我有以下数据框:
ID<-c("A", "A", "B", "B", "B", "C")
StartDate<-as.Date(c("2018-01-01", "2019-02-05", "2016-04-18", "2020-03-03", "2021-12-13", "2014-03-03"), "%Y-%m-%d")
TermDate<-as.Date(c("2018-02-01", NA, "2016-05-18", "2020-04-03", "2021-12-15", "2014-04-03"), "%Y-%m-%d")
df<-data.frame(ID=ID, StartDate=StartDate, TermDate=TermDate)
ID StartDate TermDate
1 A 2018-01-01 2018-02-01
2 A 2019-02-05 <NA>
3 B 2016-04-18 2016-05-18
4 B 2020-03-03 2020-04-03
5 B 2021-12-13 2021-12-15
6 C 2014-03-03 2014-04-03
我最终想要得到的是以下内容:
ID StartDate TermDate
1 A 2018-01-01 <NA>
2 B 2016-04-18 2021-12-15
3 C 2014-03-03 2014-04-03
解决方案
有一些函数first
和last
in可以在这里提供帮助dplyr
。data.table
library(dplyr)
df %>%
group_by(ID) %>%
summarise(StartDate = first(StartDate),
TermDate = last(TermDate))
# ID StartDate TermDate
#* <chr> <date> <date>
#1 A 2018-01-01 NA
#2 B 2016-04-18 2021-12-15
#3 C 2014-03-03 2014-04-03
与data.table
:
library(data.table)
setDT(df)[, .(StartDate = first(StartDate), TermDate = last(TermDate)), ID]
推荐阅读
- java - 如何仅使用命令行启用 slf4j 日志记录(无属性文件)
- terraform - 创建 SSL crt 并映射到 ELB | 地形
- excel - 根据另一个文件中的工作表名称激活工作表
- jquery - 尝试移动表单时使用 jQuery.detach() 进行不需要的克隆行为
- ios - 在隐藏的某些视图上缩小堆栈视图的高度
- jquery - 确定引导列内容是在左侧还是右侧(对于 Jquery 可排序)
- c# - 将单选按钮列表选定值注入类
- sql - 如何通过仅获取列中值的第一部分来扩大列中的值?
- curl - curl: (35) 对等方重置 TCP 连接
- node.js - React 项目 - 对 ExpressJS 服务器的请求返回 400 - 错误请求