我要么需要找到一种方法来重新编码,以包括住院患者的拼写错误版本,要么"标记"那些没有受到影响的版本?
df1$Admission_Type <- as.character(df1$Admission_Type)
df1$Admission_Type[df1$Admission_Type == "Inpatient"]<-"ip"
df1$Admission_Type[df1$Admission_Type == "inpatient"]<-"ip"
df1$Admission_Type[df1$Admission_Type == "INPATIENT"]<-"ip"
它像这样重复。
要处理大小写问题,请将所有转换为小写
df1 <- data.frame(Admission_Type = c("Inpatient", "inpatient", "INPATIENT", "inp", "impatient"), stringsAsFactors = FALSE)
df1$Admission_Type <- tolower(df1$Admission_Type)
然后您可以使用正则表达式来处理拼写错误。虽然不可能得到所有,但你可以用直觉来接近。在我的例子中,我故意拼错了"不耐烦"。您可以设置一个正则表达式来检测这种可能常见的错误,例如
grep("^i[nm]pat[ie][ei]nt", df1$Admission_Type, ignore.case = TRUE)
我允许第二个位置是"n"或"m",或者"ie"在6-7位置切换。这将返回
[1] 1 2 3 5
您可以在每个位置添加可能拼写错误的字母。关于如何使正则表达式更加复杂以允许在搜索时丢失/额外的字母,有很多提示。
请注意,您可以使用gsub
自动进行更换。
df1$Admission_Type[grepl("inpatient", df1$Admission_Type, ignore.case=TRUE)] = "ip"
将涵盖您列出的案例@JohnSG的答案展示了如何将潜在的拼写错误也包括在正则表达式中。(您可能希望创建一个新列来存储您的记录(至少在测试不同选项时),而不是覆盖原始数据列。)
正如@aliastaire所提到的,您可以使用agrep
进行近似匹配。例如:
x = c("inpatient","Inpatient","Impatient","inpateint")
agrep("inpatient", x, max.dist=2, ignore.case=TRUE)
所以,在你的情况下,你可以做:
df1$Admission_Type[agrep("inpatient", df1$aAdmisstion_Type, max.dist=2, ignore.case=TRUE)] = "ip"
CCD_ 4返回匹配值的索引。max.dist
控制实际值与目标值的不同程度,并且仍然被视为匹配。您可能需要对此进行测试和调整,以捕捉拼写错误,同时避免不正确的匹配。
grepl
涵盖了您在问题中列出的情况,但为了将来参考,如果您确实需要匹配多个单独的值,您可以使用%in%
函数来减少所需的代码量。在你的情况下,这将是:
df1$Admission_Type[df1$Admission_Type %in% c("Inpatient","inpatient","INPATIENT")]<-"ip"