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

在R中为长格式数据框计算连续测量的平均真实变异性

解决方案

首先需要注意你的数据中A和B列是字符类型,第一步要先转换为数值类型才能进行计算。下面提供两种实现方式:

方式1:使用dplyr包(推荐,代码更直观)

# 加载dplyr包
library(dplyr)

# 转换数据类型
DF$A <- as.numeric(DF$A)
DF$B <- as.numeric(DF$B)

# 分组计算新列C
DF <- DF %>%
  group_by(ID) %>%
  mutate(
    # 计算截至当前行的B列非NA值累积和
    cumulative_sum = cumsum(ifelse(is.na(B), 0, B)),
    # 标记组内行号
    row_num = row_number(),
    # 计算C:累积和除以(当前测量次数-1),第一行设为NA
    C = ifelse(row_num == 1, NA, cumulative_sum / (row_num - 1))
  ) %>%
  ungroup() %>%
  # 移除中间辅助列
  select(-cumulative_sum, -row_num)

方式2:使用Base R(无需额外安装包)

# 转换数据类型
DF$A <- as.numeric(DF$A)
DF$B <- as.numeric(DF$B)

# 按ID分组计算新列C
DF$C <- ave(DF$B, DF$ID, FUN = function(x) {
  # 计算累积和,NA值按0处理
  cs <- cumsum(ifelse(is.na(x), 0, x))
  # 获取组内行号序列
  n <- seq_along(x)
  # 计算C值,第一行设为NA
  ifelse(n == 1, NA, cs / (n - 1))
})

计算逻辑说明

  • 按ID分组处理,确保每个ID的计算独立进行
  • 对B列的NA值,在累积和计算时按0处理,不影响求和结果
  • 分母使用组内行号-1,对应“测量次数减1”的要求,第一行因无前置测量,C值设为NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:10:17