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

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,属于输入数据处理后的正确结果。

步骤解释

  1. 过滤行:用filter排除var1等于"NA"或"error"的行(若实际数据包含真正的缺失值NA,需替换为!is.na(var1))。
  2. 清理字符串:用str_remove_all配合正则表达式\\[.*?\\],移除所有被方括号包裹的内容(\\[/\\]转义特殊字符,.*?非贪婪匹配避免过度截取)。
  3. 拆分展开:separate_rows将每个字符串按空格拆分,把单个单元格的多个元素展开为多行。
  4. 过滤空值:移除拆分后产生的空字符串(因清理方括号后可能残留多余空格)。
  5. 统计次数:count函数直接统计每个元素的出现次数,最后重命名列以符合预期格式。

内容的提问来源于stack exchange,提问作者Jo-Achna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:52:55