在R中为配对分类组计算连续变量的差值与均值
R语言数据框新增配对组变量解决方案
原数据说明
给定的R语言样本数据包含3组配对的处理组(treatement,注意拼写)和对照组(control)数据,每行依次为处理组、对照组循环排列:
treatment <- c('treatement', 'control','treatement', 'control','treatement', 'control') PDE.kg.ha <- c(1800, 1750, 950, 750,2100, 2000) df <- data.frame(treatment, PDE.kg.ha)
补全后的代码(两种实现方式)
方式1:Base R实现
直接提取配对组的数值进行计算,再将结果映射到每行:
#Creating new variables control_vals <- df$PDE.kg.ha[df$treatment == 'control'] treat_vals <- df$PDE.kg.ha[df$treatment == 'treatement'] df['yieldDiff'] <- rep(control_vals - treat_vals, each = 2) df['yieldMean'] <- rep((control_vals + treat_vals)/2, each = 2)
方式2:dplyr分组实现
适合更复杂的分组场景,代码可读性更强:
library(dplyr) # 创建临时分组ID,每2行为一组配对 df <- df %>% mutate(group_id = rep(1:3, each = 2)) %>% group_by(group_id) %>% mutate( yieldDiff = PDE.kg.ha[treatment == 'control'] - PDE.kg.ha[treatment == 'treatement'], yieldMean = mean(PDE.kg.ha) ) %>% ungroup() %>% select(-group_id) # 可选:删除临时分组变量
结果说明
yieldDiff:每组对照组的PDE.kg.ha减去处理组的对应值,最终数据框中每组的两行都会显示同一个差值(如第一组两行均为-50)yieldMean:每组配对数据的PDE.kg.ha平均值,同样每组两行显示同一个均值
内容的提问来源于stack exchange,提问作者Maale Faustus
相关产品推荐
相关产品推荐

