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

在R语言中按样本分组计算每日观测值的累积求和

解决方案:计算样本每日观测数及累积和(R语言)

方法一:使用dplyr包(推荐,新手友好)

dplyr是R中常用的数据处理包,语法简洁易读,适合快速实现需求。

步骤1:构造示例数据(可直接复制运行)

df <- data.frame(
  sampleID = c("sample-1", "sample-1", "sample-1", "sample-1", "sample-1", "sample-1",
               "sample-2", "sample-2", "sample-2", "sample-2", "sample-2",
               "sample-3", "sample-3", "sample-3", "sample-3"),
  day = c(2,3,3,6,6,6,4,4,8,10,12,1,1,5,5),
  obs = c("blue", "red", "yellow", "green", "blue", "black",
          "blue", "yellow", "orange", "black", "red",
          "white", "black", "orange", "blue")
)

步骤2:数据处理代码

library(dplyr)

result <- df %>%
  # 按样本ID和观测日分组
  group_by(sampleID, day) %>%
  # 统计当日观测数,保留样本ID分组用于后续计算
  summarise(n_obs = n(), .groups = "drop_last") %>%
  # 计算每个样本的累积观测数
  mutate(n_cumulative = cumsum(n_obs)) %>%
  # 取消分组,转为普通数据框
  ungroup()

# 输出结果
print(result)

代码解释

  • group_by(sampleID, day):将数据按样本和日期拆分,确保后续统计的是每个样本单日的观测数
  • summarise(n_obs = n(), .groups = "drop_last"):用n()统计每组的行数(即当日观测数),.groups = "drop_last"保留样本ID的分组,方便后续计算累积和
  • mutate(n_cumulative = cumsum(n_obs)):在每个样本分组内,对单日观测数做累积求和
  • ungroup():取消分组,让结果回归普通数据框格式,方便后续操作

方法二:使用基础R(无需额外安装包)

如果不想安装dplyr包,也可以用基础R函数实现:

# 步骤1:统计每个样本每日观测数
df_agg <- aggregate(obs ~ sampleID + day, data = df, FUN = length)
colnames(df_agg)[3] <- "n_obs"

# 步骤2:计算每个样本的累积观测数
df_agg$n_cumulative <- ave(df_agg$n_obs, df_agg$sampleID, FUN = cumsum)

# 步骤3:按样本和日期排序,匹配期望输出顺序
df_agg <- df_agg[order(df_agg$sampleID, df_agg$day), ]

# 输出结果
print(df_agg)

代码解释

  • aggregate(obs ~ sampleID + day, data = df, FUN = length):按样本和日期分组,统计观测数量
  • ave(df_agg$n_obs, df_agg$sampleID, FUN = cumsum):通过ave函数按样本分组,对单日观测数计算累积和
  • order(df_agg$sampleID, df_agg$day):确保结果按样本ID和日期升序排列,与期望输出一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:20:30