R语言统计标点符号绘图时如何移除双空格导致的多余空格计数
解决方案
问题原因
你现有代码的逻辑是先移除所有字母,再按空格拆分,处理后残留的空字符串(即你观察到的空格计数项)是连续空格拆分后生成的。同时当前逻辑还会统计到非目标标点,不符合你仅统计;、-、.、,四类标点的需求。
修正方案
推荐直接提取目标标点,完全避开空格问题,逻辑更简单高效,修正后代码如下:
# 提前加载依赖包 library(stringr) library(dplyr) library(ggplot2) wekto<-c("Robot, robot; Nose, nose; Robot, robot; Toes, toes; Robot, robot - touch your nose. Robot, robot - touch your toes.") stops <- function(text){ # 仅提取指定的四类标点 str_extract_all(text, "[;\\-.,]")[[1]] %>% table() %>% as.data.frame() %>% setNames(c("Punctuation","Count")) %>% ggplot(aes(x=Punctuation,y=Count)) + geom_col() + coord_flip()+ theme_classic()+ theme(axis.text.y = element_text(size = 17)) } # 调用函数输出图表 stops(wekto)
代码说明
- 正则表达式
[;\\-.,]精准匹配你需要的四类标点,R语法里-在中括号内需要转义(加双反斜杠),避免被识别为范围运算符 - 不需要额外处理空格,自然不会生成空格相关的计数项,也不会统计到其他无关符号
如果你想要在原有代码基础上修改,只需要在setNames之后加一步过滤空值即可:filter(Punctuation != ""),即可移除空格计数项。
内容的提问来源于stack exchange,提问作者Frontmaniaac
相关产品推荐
相关产品推荐

