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

R语言DataFrame按类别合并指定行生成新行的实现问题

解决方法

你的代码存在几个问题:

  • 索引语法错误:c=1,2,3,6写法不正确,正确的向量索引应为c(1,2,3,6)
  • 列名不匹配:原数据的重量列是kg,你写的total会新增不匹配的列,导致数据结构冲突
  • 缺少删除原水果行的步骤

下面提供两种易懂的解决方式:

方法一:分步操作(适合新手理解)

library(tidyverse)

# 原始数据
data <- data.frame(
  "food"= c("Banana", "Orange", "Apple", "Meat", "Fish", "Cherries", "Wheat"),
  "kg"= c(2,3,1,2,6,4,5)
)

# 1. 计算指定水果的kg总和(用食物名称匹配比索引更可靠,避免行顺序变化出错)
fruit_total <- sum(data$kg[data$food %in% c("Banana", "Orange", "Apple", "Cherries")])

# 2. 添加新行,确保列名和原数据一致
data <- data %>%
  add_row(food = "Fruits", kg = fruit_total)

# 3. 过滤掉原来的水果行,保留汇总行和其他食物
data <- data %>%
  filter(!food %in% c("Banana", "Orange", "Apple", "Cherries"))

方法二:链式简洁操作

library(tidyverse)

data <- data.frame(
  "food"= c("Banana", "Orange", "Apple", "Meat", "Fish", "Cherries", "Wheat"),
  "kg"= c(2,3,1,2,6,4,5)
)

data <- data %>%
  # 先保留非水果行
  filter(!food %in% c("Banana", "Orange", "Apple", "Cherries")) %>%
  # 追加汇总的水果行
  add_row(
    food = "Fruits",
    kg = sum(data$kg[data$food %in% c("Banana", "Orange", "Apple", "Cherries")])
  )

运行后得到的结果:

food kg
1   Meat  2
2   Fish  6
3  Wheat  5
4 Fruits 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:11:07