我有一列数字,例如社会安全号码.我想将此列与不可接受的值列表(例如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)
只是使用嵌套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)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |