R:查找字符串中的UNIQUE字符数

时间:2014-06-04 22:53:56

标签: regex r

我希望在用户提供的数据集中找到真实的虚假识别号码(想想社会保障#,电话号码等),因此很麻烦。

有些用户故意输入虚假信息,例如“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)

谢谢!

1 个答案:

答案 0 :(得分:5)

在这里,我使用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

可能更好地测试更正面和负面的值。