我有一个来自 35 家不同医院的 ID 变量,因此变量的排列各不相同,有时它具有与辅助行号相同的根 ID 号 - 例如-1、/a、_1 等
我想删除标点符号,以及标点符号后面的任何内容,只留下根 ID 号。
我目前已经设法为每个不同的迭代编写单独的代码行,但我想知道是否有一种更优雅的方法,以便明年数据到来时我不需要检查不同的安排?
在别人的问题上,我设法找到了一种方法来删除括号和括号内的所有文本,但我似乎不知道如何为了我的目的而操纵它
df$patid<- gsub("\\s*\\([^\\)]+\\)","",df$patid)
我尝试了这两个代码没有成功
df$patid<- gsub("\\[:punct:]s*$","", df$patid)
df$patid<- gsub("\\[:alnum:]s*$","", df$patid)
我还尝试了
clean
功能,它删除了所有标点符号,但保留了后面的数字/字符,所以不是这样。
我当前代码的示例(并非所有可能的迭代) - 这些确实有效
df$patid<- gsub("\\-1$", "", df$patid)
df$patid<- gsub("\\-2$", "", df$patid)
df$patid<- gsub("\\-3$", "", df$patid)
df$patid<- gsub("\\-a$", "", df$patid)
df$patid<- gsub("\\-A$", "", df$patid)
df$patid<- gsub("\\-b$", "", df$patid)
df$patid<- gsub("\\-B$", "", df$patid)
df$patid<- gsub("\\b", "", df$patid)
df$patid<- gsub("\\/dd", "", df$patid)
我不受
gsub
的束缚,我对不同的方法持开放态度。
身份证号码示例
patid<- c("MB-13-169454", "MB-13-179455", "MB-13-212235.1", "MB-13-212235.2", "MB-13-224683", "570548260-2", "570548260-3", "1458629P-2", "1139093D-2", "8253015N/2", "8253015N/3", "M255858/1", "M255858/2", "8494392Q/2", "9296741B/2", "04152341421/A", "04152341421/B", "04152640475/B", "04152821164/A", "G140381883_1", "G140381883_2", "G140880774_1", "G140880774_2")
如果这个问题已经在某处得到回答,我们深表歉意
您所描述的字面正则表达式是:
[[:punct:]][^[[:punct:]]]*$
这将匹配最后一个点,后跟其后的任何内容,直到字符串末尾。
patid <- c("MB-13-169454", "MB-13-179455", "MB-13-212235.1", "MB-13-212235.2", "MB-13-224683", "570548260-2", "570548260-3", "1458629P-2", "1139093D-2", "8253015N/2", "8253015N/3", "M255858/1", "M255858/2", "8494392Q/2", "9296741B/2", "04152341421/A", "04152341421/B", "04152640475/B", "04152821164/A", "G140381883_1", "G140381883_2", "G140880774_1", "G140880774_2")
output <- sub("[[:punct:]][^[[:punct:]]]*$", "", patid)
output