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

如何在R中基于另一列字符串检测汇总列值并存入新数据框

解决方案:按多主题关键词汇总资助金额

问题核心

你遇到的关键问题是原数据集的「主题」列是多关键词拼接的字符串,直接用str_detect或%in%会因向量长度不匹配、匹配逻辑错误导致失败。正确思路是先把多主题拆分为单独行,再按关键词分组汇总。

完整实现步骤

先确保加载tidyverse包(包含数据处理所需的dplyr和tidyr):

library(tidyverse)

1. 数据预处理

首先清理资助金额列(去除空格并转为数值型):

# 示例数据(替换为你的实际df)
df <- data.frame(
  项目 = c("Project 1", "Project 2", "Project 3", "Project 4", "Project 5"),
  主题 = c("Agriculture, Water, Food", "Agriculture, Digital", "Agriculture, Food", "Urban planning, Food, Water, Digital", "Agriculture"),
  资助金额 = c("50 000", "100 000", "50 000", "200 000", "30 000")
)

# 清洗资助金额:去掉空格,转为数值
df$资助金额 <- as.numeric(gsub(" ", "", df$资助金额))

2. 拆分多主题为独立行

用separate_rows将每个主题拆成单独行,同时保留对应资助金额:

df_split <- df %>%
  separate_rows(主题, sep = ", ")  # 分隔符匹配你的数据格式:逗号+空格

拆分后的数据结构会变成每个主题对应一行项目记录,方便后续分组统计。

3. 按关键词分组汇总

直接按主题分组,统计出现次数和总资助金额:

themes_analysis <- df_split %>%
  group_by(主题) %>%
  summarise(
    出现次数 = n(),
    总资助金额 = sum(资助金额)
  ) %>%
  rename(关键词 = 主题)  # 重命名列名匹配期望结果

运行后得到的themes_analysis就是你需要的结果:

关键词出现次数总资助金额
Agriculture4230000
Water2250000
Food3300000
Digital2300000
Urban planning1200000

之前代码出错原因

  1. str_detect向量不匹配:df$Themes(312行)和themes_analysis$Keywords(93行)长度不一致,R无法自动循环匹配,触发回收错误。
  2. %in%逻辑错误:df$Themes是包含多关键词的字符串,%in%是完全匹配,无法检测字符串中是否包含单个关键词。
  3. sum未分组:直接调用sum会计算所有符合条件的总和,没有按单个关键词单独汇总,导致每行结果相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:36:22