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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:01:15