在R中提取符合条件的首个有效周纵向A1C数据
在R中提取受试者首个“有效周”的A1C测量数据
需求说明
现有纵向实验室数据,每条记录对应一名受试者上传A1C测量值的日期。需完成以下操作:
- 为每个受试者识别首个“有效周”:该周内至少有5天的测量记录
- 若有效周包含6或7天的记录,提取该周的全部测量数据
示例数据
# 构造示例数据框 df <- data.frame( person_id = c(rep(1000492, 12), rep(1000499, 9)), date = as.Date(c( "2019-09-11", "2019-09-22", "2019-09-23", "2019-09-24", "2019-10-15", "2019-10-16", "2019-10-18", "2019-10-19", "2019-10-20", "2019-11-14", "2019-11-15", "2019-12-16", "2019-09-11", "2019-09-12", "2019-09-26", "2019-09-27", "2019-09-28", "2019-09-29", "2019-09-30", "2019-10-01", "2019-10-02" )), a1c = c(5.5, 5.7, 5.5, 5.6, 5.5, 5.6, 5.5, 5.7, 5.5, 5.6, 5.5, 5.6, 5.5, 5.7, 5.5, 5.6, 5.5, 5.7, 5.5, 5.6, 5.5) )
期望结果
# 提取后的目标数据框 result_df <- data.frame( person_id = c(rep(1000492, 5), rep(1000499, 7)), date = as.Date(c( "2019-10-15", "2019-10-16", "2019-10-18", "2019-10-19", "2019-10-20", "2019-09-26", "2019-09-27", "2019-09-28", "2019-09-29", "2019-09-30", "2019-10-01", "2019-10-02" )), a1c = c(5.5, 5.6, 5.5, 5.7, 5.5, 5.5, 5.6, 5.5, 5.7, 5.5, 5.6, 5.5) )
解决方案(使用tidyverse)
library(tidyverse) # 处理数据:识别并提取首个有效周 final_df <- df %>% # 确保date列是日期格式(若原始数据未转换) mutate(date = as.Date(date)) %>% # 按受试者分组 group_by(person_id) %>% # 标记日期所属周(以周日为一周起始,可通过week_start调整,1=周一) mutate(week = floor_date(date, "week", week_start = 7)) %>% # 统计每个周内的记录天数 add_count(week, name = "days_in_week") %>% # 筛选有效周(天数≥5),提取每个受试者的第一个有效周 filter(days_in_week >= 5) %>% slice_min(order_by = week, n = 1, with_ties = TRUE) %>% # 移除辅助列 select(-week, -days_in_week) %>% ungroup() # 查看结果 print(final_df)
代码说明
floor_date(date, "week", week_start = 7):将日期归到所在周的起始日(周日),确保同一周的记录被归为一组add_count(week):统计每个周内的测量记录天数filter(days_in_week >=5):筛选出符合要求的有效周slice_min(order_by = week, n=1, with_ties=TRUE):提取每个受试者最早的有效周,with_ties=TRUE保证该周的所有记录都被保留
内容的提问来源于stack exchange,提问作者Walter Schmidt
相关产品推荐
相关产品推荐

