如何在R语言中对数据框按分组执行复杂代数运算
解决方案
原有代码无法运行的核心原因有两点:
- 使用
mydata$mean1这种写法会直接提取整个原始数据集的列,无法识别dplyr的分组环境,最终计算的是全局均值而非分组均值 - 分组后的计算需要用
summarise()(返回每个分组一行的汇总结果)或者mutate()(返回和原数据同行数,分组计算结果填充所有组内行)承接运算,不能直接在管道后写公式
你不需要单独生成中间存储的汇总表,可以直接在summarise内一步完成计算,所有运算在一次分组遍历中完成,没有冗余中间数据,效率和可读性都更高:
library(dplyr) result <- mydata %>% group_by(district) %>% summarise( stat = sqrt(n()) * (mean(mean1) - mean(mean2)) / sqrt(mean(var)) )
上述代码中:
- 分组后直接用
n()即可获取当前分组的观测数,不需要调用n(mydata) - 直接写列名
mean1、mean2、var会自动取当前分组内的对应列计算,不需要加数据集前缀
如果需要把分组计算结果匹配回原数据的每一行,把summarise替换为mutate即可:
result <- mydata %>% group_by(district) %>% mutate( stat = sqrt(n()) * (mean(mean1) - mean(mean2)) / sqrt(mean(var)) ) %>% ungroup()
内容的提问来源于stack exchange,提问作者1muflon1
相关产品推荐
相关产品推荐

