如何在R语言中去除观测值'Don't Know'中的撇号
问题:无法将观测值'Don't Know'替换为'Dont Know'
我尝试了各种方法,但仍无法去除观测值'Don't Know'中的撇号,期望将其改为'Dont Know'。试过诸多相关方案,涉及多个变量修改,代码可运行但无实际效果。尝试过的代码如下:
# 尝试1:批量处理所有列 thesis <- as.data.frame(sapply(thesis, function(doaway) gsub("'", "", doaway))) # 尝试2:循环处理每一列 for(i in 1:ncol(thesis)){ thesis[,i] <- gsub("'","",thesis[,i]) } # 尝试3:针对单个列匹配替换(存在空格语法问题) thesis$doaway[thesis $doaway== "Don\'t Know"] = "Dont Know" # 尝试4:语法错误的匹配 thesis$doaway[thesis $doaway== "Don"\'\"t Know"] = "Dont Know" # 尝试5:转义错误的匹配 thesis$doaway[thesis $doaway== "Don'\''t Know"] = "Dont Know"
无论针对单个观测值还是整个数据集,都无法完成该操作。
解决方案
1. 先排查列的数据类型
如果doaway列是因子类型,直接修改字符会因因子水平限制失效,先转为字符型:
# 转为字符型 thesis$doaway <- as.character(thesis$doaway)
2. 精准替换目标字符串
情况1:目标是普通单引号'
直接匹配替换:
# 方法A:全局替换该列所有单引号 thesis$doaway <- gsub("'", "", thesis$doaway) # 方法B:仅替换特定字符串 thesis$doaway[thesis$doaway == "Don't Know"] <- "Dont Know"
情况2:目标是特殊单引号(如右单引号’)
有时候视觉上的单引号实际是编码不同的特殊字符,先查看字符编码确认:
# 提取含"Know"的唯一值,查看字符编码 charToRaw(unique(thesis$doaway)[grep("Know", unique(thesis$doaway))])
如果是右单引号,用对应字符替换:
# 替换右单引号 thesis$doaway <- gsub("’", "", thesis$doaway) # 同时兼容两种单引号 thesis$doaway <- gsub("['’]", "", thesis$doaway)
3. 修复原代码的语法问题
原尝试3中thesis $doaway的空格会导致语法错误,去掉空格即可:
thesis$doaway[thesis$doaway == "Don't Know"] <- "Dont Know"
内容的提问来源于stack exchange,提问作者Maddison Westcott
相关产品推荐
相关产品推荐

