循环遍历df列,与列表进行比较并创建新列

Rob*_*Rob 1 regex loops r

我有一列数字,例如社会安全号码.我想将此列与不可接受的值列表(例如11111111或类似12345678)进行比较.还有一些我想要执行的grepl操作,就像前3位数不能000.下面是我认为代码看起来像的骨架,我更喜欢for循环逻辑.

ssns <- c(12343210,23454321,34565432,11111111)
badssns <- c(11111111,22222222)

for( i in 1:length(ssns)) {
    if(ssns[i] %in% badssn_list) {
        ssns$newcolumn==BADSSN
      }
    else if( grepl(first 3 numbers 0){
        ssns$newcolumn==BADSSN
      }
    else{ssns$newcolumn==GOODSSN}
}
Run Code Online (Sandbox Code Playgroud)

Jaa*_*aap 5

只是使用嵌套ifelse应该做的工作imo:

ssns$newcolumn <- ifelse(ssns$num %in% badssns, 'BADSSN', 
                         ifelse(substr(ssns$num,1,3)=='000', 'BADSSN', 'GOODSSN'))
Run Code Online (Sandbox Code Playgroud)

或使用OR语句缩短(|):

ssns$newcolumn <- ifelse(ssns$num %in% badssns| substr(ssns$num,1,3)=='000', 'BADSSN', 'GOODSSN')
Run Code Online (Sandbox Code Playgroud)

这使:

> ssns
       num newcolumn
1 12343210   GOODSSN
2 23454321   GOODSSN
3 34565432   GOODSSN
4 11111111    BADSSN
5 00065432    BADSSN
Run Code Online (Sandbox Code Playgroud)

使用数据:

ssns <- data.frame(num = c('12343210','23454321','34565432','11111111','00065432'), stringsAsFactors = FALSE)
badssns <- c('11111111','22222222')
Run Code Online (Sandbox Code Playgroud)