我希望在用户提供的数据集中找到真实的和伪造的身份号码(例如社会安全号码、电话号码等),因此很困惑。
某些用户故意输入虚假信息,例如“idk”、“fu”、123456 或 222222。
我可以很容易地过滤掉这些单词,但我想变得更花哨一点,捕获更多明显错误的信息。
从概念上讲,我想删除那些几乎每个数字都是唯一的、几乎每个数字都相同的数字。因此,像 2220222 和 123451 这样的数字将被删除。
这需要运行得相当快,并且不会占用大量内存,因此在每个条目上执行内部循环实际上并不可行。我希望/认为必须有一种聪明的方法来使用正则表达式来做到这一点。
这是我希望发生的事情的一个稻草:
filter.func(my.str.array, 2, 2)
### Returns a logical array of length "my.str.array" with "TRUE" meaning that
### it would not be filtered, and "FALSE" that a filtering rule was broken
### the "2" and "2" are, respectively:
### First "2": the min # of acceptable non-unique values (e.g., to catch 123456)
### Second "2": the min # of acceptable non-duplicated values (to catch 222222)
谢谢!
最佳答案
这里我使用strsplit
将单词分割成字符;然后我使用 table
来计算字符数。
filter.func<-function(x, mindup=2, mindiff=2) {
spt<-lapply(strsplit(x,""), table)
sapply(spt, function(x) {sum(x>1)>=mindup & sum(x>0)>=mindiff})
}
filter.func(c("22222","123456","234356"),2,2)
# [1] FALSE FALSE TRUE
使用更多正值和负值进行测试可能会更好。
关于regex - R:查找字符串中唯一字符的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048927/