You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中为每个ID设置独立起始日期并计算自称重统计量的问询

问题需求

为每个ID设置独立起始日期,计算两个核心指标:

  1. 年度内个体称重次数≥6次的周数(格式:达标周数/总周数)
  2. 年度内个体每周平均称重天数(格式:平均天数/7)

数据集结构示例:

IDWeightTimestampDayWeek
12002021/05/0518752202118
12052021/05/0618753202118
12032021/05/1018757202119
21702021/05/0518752202118
21772021/05/0618753202118

预期输出:

IDNumber of weeks/ year with 6+Avg number of days/week over 1 year
1example: 35/52example: 4.3/7
2example: 23/52example: 3.5/7
R实现方案

使用dplyr和lubridate包高效处理分组计算,无需循环:

# 加载依赖包
library(dplyr)
library(lubridate)

# 示例数据(替换为你的实际数据集)
df <- data.frame(
  ID = c(1,1,1,2,2),
  Weight = c(200,205,203,170,177),
  Timestamp = c("2021/05/05","2021/05/06","2021/05/10","2021/05/05","2021/05/06"),
  Day = c(18752,18753,18757,18752,18753),
  Week = c(202118,202118,202119,202118,202118)
)

# 1. 数据预处理:转换日期、确定个体起始日、筛选1年周期内的数据
processed_df <- df %>%
  mutate(Timestamp = ymd(Timestamp)) %>%
  group_by(ID) %>%
  mutate(
    start_date = min(Timestamp),  # 以个体首次测量日为起始,可自定义替换
    end_date = start_date + days(364),  # 覆盖365天周期
    in_year = Timestamp >= start_date & Timestamp <= end_date
  ) %>%
  filter(in_year) %>%
  ungroup()

# 2. 按ID分组计算指标
result <- processed_df %>%
  group_by(ID, Week) %>%
  summarise(
    weekly_count = n(),
    daily_unique = n_distinct(Day),
    .groups = "drop_last"
  ) %>%
  summarise(
    `Number of weeks/ year with 6+` = paste(sum(weekly_count >= 6), n_distinct(Week), sep = "/"),
    `Avg number of days/week over 1 year` = paste(round(mean(daily_unique), 1), 7, sep = "/")
  ) %>%
  ungroup()

# 输出结果
print(result)

关键说明

  • 起始日期默认取每个ID的首次测量日,若需指定其他日期(如入组日),直接将start_date = min(Timestamp)替换为对应列或固定日期即可
  • 用days(364)确保周期包含起始日在内共365天
  • 先按周统计基础数据,再向上汇总年度指标,逻辑清晰且效率优于循环

内容的提问来源于stack exchange,提问作者Anas Alkanderi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:57:21