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

如何在tidyverse中不转宽格式为mpg数据集按组新增class标识outdoors并计算hwy总和

解决方案

当然可以在tidyverse中不转换为宽格式实现需求,你的代码问题在于试图给不存在的class="outdoors"观测赋值,且求和逻辑的写法有误。以下分两种常见需求场景给出实现代码:

场景1:新增class="outdoors"的汇总行(每组一行,记录目标厂商hwy总和)

如果需要为每个group添加一行class="outdoors"的汇总数据,对应该组内jeep、land rover、subaru车型的hwy里程总和,代码如下:

library(tidyverse)
data(mpg)

# 定义目标厂商集合
target_mfrs <- c("jeep", "land rover", "subaru")

mpg_new <- mpg %>%
  # 添加group列,每组117行
  mutate(group = rep(c(1, 2), times = 117)) %>%
  # 按group分组计算目标厂商的hwy总和,构造汇总行
  group_by(group) %>%
  summarise(
    class = "outdoors",
    hwy = sum(hwy[manufacturer %in% target_mfrs], na.rm = TRUE),
    # 其他非必要列用NA填充,若需保留可按需调整
    .groups = "drop"
  ) %>%
  # 将汇总行与原数据合并
  bind_rows(mpg %>% mutate(group = rep(c(1, 2), times = 117))) %>%
  # 可选:按group排序,方便查看
  arrange(group)

场景2:将目标厂商的class替换为outdoors,便于后续分组计算

如果需要把原数据中jeep、land rover、subaru车型的class直接替换为outdoors,之后可按group和class分组求和,代码如下:

library(tidyverse)
data(mpg)

target_mfrs <- c("jeep", "land rover", "subaru")

mpg_new <- mpg %>%
  mutate(group = rep(c(1, 2), times = 117)) %>%
  group_by(group) %>%
  # 替换目标厂商的class为outdoors
  mutate(class = ifelse(manufacturer %in% target_mfrs, "outdoors", class)) %>%
  # 可选:直接计算每组outdoors类别的hwy总和
  summarise(outdoors_hwy_total = sum(hwy[class == "outdoors"], na.rm = TRUE), .groups = "drop")

关键说明

  • 使用manufacturer %in% 向量的方式批量筛选目标厂商,比逐个判断更简洁。
  • 添加na.rm = TRUE避免因缺失值导致求和结果为NA。
  • 两种方案均无需转换为宽格式,完全基于tidyverse的分组、汇总、合并逻辑实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:45:17