R语言拆分data frame列内逗号分隔字符串并统计类别频次的实现
R语言实现嵌套类别拆分与频次统计的常用方案
首先构造与示例完全匹配的测试数据框作为后续代码的运行基础:
df <- data.frame( Category = c("A", "A, B", "A, B, C", "B, C") )
方法1:基础R原生实现(无额外依赖)
无需安装第三方包,通过内置函数即可完成全流程操作,适合快速临时分析场景:
# 按", "拆分所有单元格内容,展开为一维类别向量 all_categories <- unlist(strsplit(df$Category, split = ", ")) # 统计频次并转换为两列结构的数据框 freq_result <- as.data.frame(table(all_categories)) # 按需求调整列名 colnames(freq_result) <- c("Category", "Frequency")
该方法轻量无环境依赖,针对常规小体量数据集运行效率足够。
方法2:tidyverse生态实现(适配常规数据清洗流程)
是日常分析场景最常用的实现路径,流程可读性强,拆分后的结果可直接接入后续数据处理步骤:
library(dplyr) library(tidyr) freq_result <- df |> # 将单元格内的多类别值拆分为独立行 separate_rows(Category, sep = ", ") |> # 按类别分组计算出现频次 count(Category, name = "Frequency")
方法3:data.table实现(适配大数据量场景)
针对百万行级别的大体积数据集,该方法运行速度更快、内存占用更低:
library(data.table) # 转换为data.table格式 dt <- as.data.table(df) # 拆分并统计频次 freq_result <- dt[, .(Frequency = .N), by = .(Category = unlist(tstrsplit(Category, split = ", "))) ]
通用注意事项:如果实际业务数据中分隔符前后空格不统一(例如存在
"A,B"无空格的写法),可将拆分分隔符替换为正则表达式",\\s*",匹配逗号后任意数量的空白字符,避免拆分错位、值识别失败的问题。
内容的提问来源于stack exchange,提问作者Jasper
相关产品推荐
相关产品推荐

