R语言字符串标准化与因子转换问题:文本修正及因子合并
非标准化调查文本数据的清洗方案
先还原示例数据集:
# 创建数据集 df <- data.frame( id = c('person1','person2','person3'), category = c('I am 0-10 years old', 'I am 11-20 years old', 'I am between 21-30 years old'), Q1.do.you.feel.tired.everyday = c('no, never', 'yes, sometimes', 'yes some-times') )
问题1:统一Q1列的文本格式
要把yes some-times修正为yes, sometimes,有两种常用实现方式:
方式1:Tidyverse生态(dplyr + stringr)
library(dplyr) library(stringr) df <- df %>% mutate(Q1.do.you.feel.tired.everyday = str_replace( Q1.do.you.feel.tired.everyday, pattern = "yes some-times", replacement = "yes, sometimes" ))
方式2:基础R原生函数
df$Q1.do.you.feel.tired.everyday <- gsub( pattern = "yes some-times", replacement = "yes, sometimes", x = df$Q1.do.you.feel.tired.everyday )
处理后Q1列的文本完全统一,后续转因子时不会再出现重复水平。
问题2:清理category列的冗余关键词
要移除between并修正文本,同样可以用字符串替换:
方式1:Tidyverse生态
df <- df %>% mutate(category = str_remove(category, "between "))
方式2:基础R原生函数
df$category <- gsub(pattern = "between ", replacement = "", x = df$category)
执行后第三行的I am between 21-30 years old会变为I am 21-30 years old。
因子转换的修正结果
文本统一后,再执行你原有的因子转换代码:
df <- df %>% mutate(across(where(is.character), as.factor))
此时Q1.do.you.feel.tired.everyday列的因子水平仅为no, never和yes, sometimes两个,符合预期。
内容的提问来源于stack exchange,提问作者chartreusefrogs
相关产品推荐
相关产品推荐

