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

在R中按ID计算长格式数据框的几何均值问题求助

按分组计算数据框列的几何均值(R语言实现)

dplyr 解决方案

原代码使用的summarise_all在新版dplyr中已被弃用,推荐使用更灵活的summarise(across(...))语法。以下是修正后的代码:

library(dplyr)

# 构造示例数据
mtcars_sub <- mtcars[, 1:2]

# 按cyl分组,计算所有列的几何均值
mtcars_sub_gm <- mtcars_sub %>%
  group_by(cyl) %>%
  summarise(across(everything(), ~ exp(mean(log(.), na.rm = TRUE))))

如果需要指定特定列(比如实际场景中的80+列),可以替换everything()为目标列向量:

# 定义要计算几何均值的列
gm_vars <- names(mtcars_sub)[1] # 实际使用时替换为你的列名向量

mtcars_sub_gm <- mtcars_sub %>%
  group_by(cyl) %>%
  summarise(across(all_of(gm_vars), ~ exp(mean(log(.), na.rm = TRUE))))

data.table 解决方案

原代码未将数据转换为data.table对象,导致语法失效。需要先转换为data.table再执行分组计算:

library(data.table)

# 将数据框转换为data.table
mtcars_sub <- as.data.table(mtcars[, 1:2])

# 指定目标列
gm_vars <- names(mtcars_sub)[1]

# 按cyl分组计算几何均值
mtcars_sub_gm <- mtcars_sub[, lapply(.SD, function(x) exp(mean(log(x, na.rm = TRUE)))), 
                            by = cyl, .SDcols = gm_vars]

关键注意事项

  • 确保计算列的所有值都是正数:log(0)或负数会返回NA/NaN,导致几何均值计算失败,需提前过滤或替换这类值。
  • na.rm = TRUE会忽略NA值,若需保留NA并让结果为NA,可移除该参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:05:30