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

R语言:拆分多分类行并累加对应计数的实现求助

解决方案

方法一:使用tidyverse工具包(推荐,代码简洁易读)

先构造原始数据:

df <- data.frame(
  value1 = c("apple", "orange", "banana", "apple,orange"),
  count = c(2, 4, 6, 2),
  stringsAsFactors = FALSE
)

用separate_rows拆分逗号分隔的条目,再分组求和:

library(tidyverse)

df_processed <- df %>%
  # 按逗号拆分value1,将单行拆为多行
  separate_rows(value1, sep = ",") %>%
  # 按value1分组
  group_by(value1) %>%
  # 对每组的count求和
  summarize(count = sum(count)) %>%
  ungroup()

运行后得到目标结果:

> df_processed
# A tibble: 3 × 2
  value1 count
  <chr>  <dbl>
1 apple      3
2 banana     6
3 orange     5

方法二:Base R实现(无需额外安装包)

先构造原始数据,再通过拆分、扩展数据框后聚合:

df <- data.frame(
  value1 = c("apple", "orange", "banana", "apple,orange"),
  count = c(2, 4, 6, 2),
  stringsAsFactors = FALSE
)

# 拆分每个value1为字符向量
split_values <- strsplit(df$value1, ",")
# 生成对应长度的count向量(拆分后每个元素复用原行的count)
expanded_counts <- rep(df$count, sapply(split_values, length))
# 展开拆分后的value1
expanded_values <- unlist(split_values)

# 聚合求和得到结果
df_processed <- aggregate(
  count ~ value1,
  data = data.frame(value1 = expanded_values, count = expanded_counts),
  FUN = sum
)

你原有代码的问题

直接执行df$value1 <- unlist(strsplit(as.character(df$value1), ","))会报错——原数据框是4行,但拆分后得到5个元素,长度不匹配无法直接赋值。正确思路是先把数据框扩展为拆分后的多行结构,再分组求和,而非直接替换原列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:27:26