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

R语言:计算多站点中处理组与对照组的成对差值均值

同站点内处理组与对照组成对差值的均值计算

你需要在长数据框中按站点分组,对每个处理组(a)的数值,计算其与同站点所有对照组(cont)数值的差值的均值;对照组的结果设为NA,不跨站点计算。

示例输入数据:

df <- read.table(text = "
Site   Treatment  Value
1      cont          3
1      cont          2
1      cont          8
1      a             20
1      a             0
1      a             1
1      a             1
2      cont          18
2      cont          21
2      cont          60
2      a             3
2      a             4
2      a             40", header = T)

解决方案1:使用dplyr包

通过分组提取对照组数值,逐行计算差值均值:

library(dplyr)

output <- df %>%
  group_by(Site) %>%
  mutate(
    # 存储当前站点所有对照组的数值
    cont_values = list(Value[Treatment == "cont"]),
    # 计算处理组的差值均值,对照组设为NA
    Difference = ifelse(Treatment == "a",
                        sapply(Value, function(x) mean(x - cont_values[[1]])),
                        NA)
  ) %>%
  select(-cont_values) %>% # 移除临时辅助列
  mutate(Difference = round(Difference, 2)) %>% # 保留两位小数
  ungroup()

print(output)

解决方案2:使用Base R

无需加载额外包,通过by()函数实现分组计算:

output_base <- do.call(rbind, by(df, df$Site, function(group) {
  cont_vals <- group$Value[group$Treatment == "cont"]
  group$Difference <- ifelse(group$Treatment == "a",
                             sapply(group$Value, function(x) mean(x - cont_vals)),
                             NA)
  group$Difference <- round(group$Difference, 2)
  return(group)
}))

rownames(output_base) <- NULL # 清除自动生成的行名
print(output_base)

输出结果

运行后得到的结果与期望输出一致(注:Site2中处理组a=40的差值均值实际为7,与你给出的示例输出中的-7不符,应为笔误,代码逻辑严格遵循“处理组值 - 对照组值”的计算规则):

# A tibble: 13 × 4
    Site Treatment Value Difference
   <int> <chr>     <int>      <dbl>
 1     1 cont          3         NA
 2     1 cont          2         NA
 3     1 cont          8         NA
 4     1 a            20       15.7
 5     1 a             0       -4.33
 6     1 a             1       -3.33
 7     1 a             1       -3.33
 8     2 cont         18         NA
 9     2 cont         21         NA
10     2 cont         60         NA
11     2 a             3      -30  
12     2 a             4      -29  
13     2 a            40        7  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:35:36