R语言拆分问卷多选答案为多列 生成Others列的异常修复
修复方案
你现有代码的问题出在Others列的清理逻辑不完整:移除所有预设选项文本后,仅处理了开头固定长度的前缀逗号,没有覆盖首尾残留的多逗号、空格场景,当答案全部为预设选项时,就会残留,,这类无效分隔符。
直接替换为以下代码即可,同时优化了原代码硬编码13个选项列的冗余写法,后续调整预设选项只需修改Q1_names向量即可:
Q1_names <- c("Blog ou site pessoal", "Facebook", "Messenger", "Instagram", "Reddit", "Signal", "Telegram", "TikTok", "Twitter", "WhatsApp", "Youtube", "Não me sinto seguro para me expressar em nenhum ambiente digital", "Nenhuma das anteriores") amb_seg_correct1 <- df1 %>% mutate( # 批量生成13个预设选项的0/1标记列 across( .cols = Q1, .fns = setNames( lapply(Q1_names, function(opt) ~+str_detect(.x, opt)), paste0("Q1.", seq_along(Q1_names)) ), .names = "{.fn}" ), # 修复后的Others列处理逻辑 Others = str_remove_all(Q1, str_c(Q1_names, collapse = '|')), # 清除开头所有连续的逗号、空格 Others = str_replace(Others, "^[\\s,]+", ""), # 清除结尾所有连续的逗号、空格 Others = str_replace(Others, "[\\s,]+$", ""), # 清理后无有效内容则标记为0,否则保留自定义答案(不会误删答案内部自带的逗号) Others = if_else(str_remove_all(Others, "[\\s,]") == "", "0", Others) )
逻辑说明
- 预设选项列通过
across批量生成,避免手动逐列编写的重复劳动和笔误风险 - Others列新增首尾全量标点、空格清理,覆盖多逗号残留场景
- 最终判断逻辑会识别所有只剩分隔符的空内容,统一赋值为
0,不会破坏自定义答案内部的逗号、文本结构,示例中带逗号的自定义填写内容可以完整保留。
内容的提问来源于stack exchange,提问作者acciolaura
相关产品推荐
相关产品推荐

