R语言中使用str_detect统计选项3人数,排除-3和13的问题求助
解决问卷多选题选项计数的正则匹配问题
首先,你之前用\b3没生效的核心原因是R字符串的转义规则:在R中,单个\是转义符,要表示正则里的单词边界\b,必须写成\\b。但即使修正转义,单纯的\\b3\\b可能还是会误匹配(比如会把-3里的3当成独立选项,因为-是非单词字符,3是单词字符,两者间会被\b识别为边界)。
给你两个更可靠的解决方案:
方案1:精准正则匹配(适合answers是字符串格式的情况)
如果你的answers列是类似"3,13,-3"或"[3,13,-3]"的字符串,用正则匹配完整独立的选项3,要考虑选项前后的分隔符(逗号、括号、空格)或字符串首尾:
sum(str_detect(data$answers, "(^|[,\\s\\[])3($|[,\\s\\])"))
这个正则的逻辑是:匹配3,且3的前面是字符串开头、逗号、空格或左方括号;3的后面是字符串结尾、逗号、空格或右方括号,确保只统计独立的选项3。
方案2:展开列表后统计(更稳妥,适合answers是列表格式的情况)
既然answers是列表变量,直接把列表拆成每行一个选项,再统计是最不容易出错的方法,用tidyr和dplyr实现:
library(tidyr) library(dplyr) # 展开列表并统计每个选项的人数 result <- data %>% unnest(answers) %>% count(answers, name = "count") # 查看结果 print(result)
这种方法直接处理原始的选项值,完全避免正则匹配的歧义,能准确得到选项3、13、-3各自的计数。
内容的提问来源于stack exchange,提问作者Diana van der Plaat
相关产品推荐
相关产品推荐

