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

如何在mtcars数据框中添加qsec_control列:计算排除当前cyl水平的qsec均值

在R的mtcars数据框中新增排除当前cyl水平的qsec均值列

下面提供两种高效的实现方案,适配不同代码风格需求:

方法一:使用dplyr(tidyverse生态)

通过全局统计量与分组统计量的差值计算,避免逐行循环,效率更高:

library(dplyr)

mtcars <- mtcars %>%
  # 计算全局qsec总和与总观测数
  mutate(total_qsec = sum(qsec),
         total_n = n()) %>%
  # 按cyl分组,计算每组qsec总和与观测数
  group_by(cyl) %>%
  mutate(group_qsec = sum(qsec),
         group_n = n()) %>%
  ungroup() %>%
  # 计算排除当前cyl组后的均值
  mutate(qsec_control = (total_qsec - group_qsec)/(total_n - group_n)) %>%
  # 可选:移除临时计算列
  select(-total_qsec, -total_n, -group_qsec, -group_n)

逻辑说明:排除当前行的cyl水平等价于排除整个cyl分组的所有行,因此用全局总和/数量减去分组总和/数量,再做除法即可得到该分组所有行对应的目标均值。

方法二:Base R实现

无需加载第三方包,通过命名向量匹配实现:

# 预计算每个cyl水平对应的排除后均值
cyl_excl_means <- sapply(unique(mtcars$cyl), function(cyl_val) {
  mean(mtcars$qsec[mtcars$cyl != cyl_val])
})
names(cyl_excl_means) <- unique(mtcars$cyl)

# 新增目标列,通过cyl值匹配对应均值
mtcars$qsec_control <- cyl_excl_means[as.character(mtcars$cyl)]

逻辑说明:先遍历所有唯一的cyl值,计算排除该值后的qsec均值并存储为命名向量,再根据每行的cyl值直接匹配对应的均值。

验证结果

可以通过以下代码验证正确性:

# 计算cyl=6时的排除后均值
mean(mtcars$qsec[mtcars$cyl != 6])
# 查看mtcars中cyl=6的行的qsec_control值
mtcars$qsec_control[mtcars$cyl == 6]

两者结果完全一致,说明实现正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:01:14