r-创建变量以标记无效的社会安全号码



是否有人创建了一个变量来标记无效的社会保障号码?我的数据集包括许多不同的格式以及有效和无效,我正在寻找一个能够区分好坏的脚本,包括三个位置中任何一个位置都为零的脚本,以及排除伪SSN(例如999999999、078051120等(。提前谢谢!

 SSN <- data.frame(SSN = c("123456789", "MR1234567", "666786543", 
"800445678", "45678AB90", "772123456", 
"987654321", "234-56-7890", "123004567", "000345678"))

@JasonAizkalns在构建方面有着正确的想法。以下是我的操作方法。这可以处理您提供的所有示例,但也可以为您提供一些关于如何处理其他案例的想法。

您需要将其暂存,因为试图让一个正则表达式完成这项工作太乏味且容易出错。因为您希望对原始数据中的坏数据建立索引,所以在每一步都要保留这些索引。

  1. 通过删除连字符来正则化。如果需要,您可以将其扩展为包括其他标点符号。

    SSN$SSN <- gsub('-','', SSN$SSN)

    如果您要找到其他一些坏字符(如#(,只需将其添加为OR 的|即可

    SSN$SSN <- gsub('-|#','', SSN$SSN)

  2. 获取而非的条目有9位数字的索引;因此,invert=T 的使用

    not.9 <- grep('\d{9}', SSN$SSN, invert=T)

  3. 找到顺序零为no的三个位置;使用OR、^$的条形图来锚定每个条目中的第一个和最后一个集合(nnn和nnnn(

    zeros <- grep('(^000)|(\d{3}00)|(0000$)', SSN$SSN)

  4. 组合集合

    bad.ones <- c(not.9, zeros)

print(SSN$SSN[bad.ones])

[1] "MR1234567"45678AB90"123004567"000345678">

最新更新