如何按DataFrame拆分后的单个单词汇总对应value值?
没问题,这其实是个典型的字符串拆分+分组求和任务,用R里的工具链就能轻松搞定,我给你两种常用的实现方式,选你顺手的来:
方法一:用tidyverse工具链(推荐,简洁易读)
这是现在R数据分析里最常用的方式,借助tidyr的拆分函数和dplyr的分组聚合功能:
# 先安装并加载tidyverse(如果还没安装的话) install.packages("tidyverse") library(tidyverse) # 你的原始数据 df1 <- data.frame( word = c("house, garden, flower", "flower, red", "garden, tree, forest", "house, window, door, red"), value = c(10,12,20,5), stringsAsFactors = FALSE ) # 核心处理代码 result <- df1 %>% # 把逗号加空格分隔的单词拆成独立行,保留对应value separate_rows(word, sep = ", ") %>% # 按单词分组 group_by(word) %>% # 对每组的value求和 summarise(value = sum(value)) %>% # 取消分组(可选,方便后续操作) ungroup() # 查看结果 print(result)
运行后你会得到符合预期的输出:
# A tibble: 8 × 2 word value <chr> <dbl> 1 door 5 2 flower 22 3 forest 20 4 garden 30 5 house 15 6 red 17 7 tree 20 8 window 5
方法二:基础R实现(无需额外安装包)
如果你不想加载第三方包,用基础R的原生函数也能完成:
# 你的原始数据 df1 <- data.frame( word = c("house, garden, flower", "flower, red", "garden, tree, forest", "house, window, door, red"), value = c(10,12,20,5), stringsAsFactors = FALSE ) # 拆分每个字符串为单词列表 word_list <- strsplit(df1$word, ", ") # 生成对应每个单词的value向量(重复原value对应次数) value_vec <- rep(df1$value, sapply(word_list, length)) # 把单词列表展开为向量 words_vec <- unlist(word_list) # 用aggregate函数分组求和 result_base <- aggregate(value_vec ~ words_vec, FUN = sum) # 重命名列名 colnames(result_base) <- c("word", "value") # 查看结果 print(result_base)
关键逻辑说明
两种方法的核心思路完全一致:先把每个单元格里的多个单词拆成独立条目,让每个单词和对应的原始value一一绑定,最后按单词分组求和。tidyverse的写法更直观,代码可读性更高,适合复杂数据处理场景;基础R写法适合不想依赖第三方包的轻量需求。
内容的提问来源于stack exchange,提问作者nississippi
相关产品推荐
相关产品推荐

