R语言:按空格拆分var1列字符串并统计词频(排除指定内容)
R语言:数据框字符串拆分后统计元素出现次数(含过滤规则)
问题描述
需要处理数据框中的var1列,完成以下操作:
- 将所有字符串按空格拆分
- 统计各元素的出现次数
- 排除值为字符串
NA、error的行 - 排除被方括号包裹的内容(如
[ZZ])
示例数据
d1 <- data.frame(var1 = c('AAA AA AA BB CC', 'BB [ZZ]', 'NA','error','[ZZ] DD' ))
解决方案代码
使用tidyverse工具链(dplyr+stringr)可以简洁实现需求:
library(tidyverse) # 定义示例数据 d1 <- data.frame(var1 = c('AAA AA AA BB CC', 'BB [ZZ]', 'NA','error','[ZZ] DD' )) # 处理流程 result <- d1 %>% # 过滤掉"NA"和"error"行 filter(var1 != "NA", var1 != "error") %>% # 移除所有方括号包裹的内容 mutate(clean_var1 = str_remove_all(var1, "\\[.*?\\]")) %>% # 按空格拆分字符串并展开为多行(匹配一个或多个空格) separate_rows(clean_var1, sep = "\\s+") %>% # 过滤拆分后产生的空字符串 filter(clean_var1 != "") %>% # 统计每个元素的出现次数 count(clean_var1, name = "count") %>% # 重命名列以匹配预期输出格式 rename(var1 = clean_var1) # 查看结果 print(result)
输出结果
var1 count 1 AAA 1 2 AA 2 3 BB 2 4 CC 1 5 DD 1
注:示例预期输出中的DDDD应为DD,属于输入数据处理后的正确结果。
步骤解释
- 过滤行:用
filter排除var1等于"NA"或"error"的行(若实际数据包含真正的缺失值NA,需替换为!is.na(var1))。 - 清理字符串:用
str_remove_all配合正则表达式\\[.*?\\],移除所有被方括号包裹的内容(\\[/\\]转义特殊字符,.*?非贪婪匹配避免过度截取)。 - 拆分展开:
separate_rows将每个字符串按空格拆分,把单个单元格的多个元素展开为多行。 - 过滤空值:移除拆分后产生的空字符串(因清理方括号后可能残留多余空格)。
- 统计次数:
count函数直接统计每个元素的出现次数,最后重命名列以符合预期格式。
内容的提问来源于stack exchange,提问作者Jo-Achna
相关产品推荐
相关产品推荐

