我有一列,每条记录包含多个行业代码,用逗号分隔,并且每个行业代码的长度都不同(从2到6位数字)。我的数据框中的一条记录如下所示:
naics <- c("5413, 541410, 11, 23611, 23, 611")
我希望能够根据每个单元中的字符数创建一个新数组。例如,这里我仅提取四位数的数字字符:
naics.four.digit <- unlist(str_extract_all(naics, "[0-9]{4}+"))
naics.four.digit
[1]"5413" "5414" "5414" "5416" "6117"
如上所述,我使用了str_extract_all
,该方法效果很好。但是,一旦我尝试提取3位和2位字符,此方法就会失效。
naics.three.digit <- unlist(str_extract_all(naics, "[0-9]{3}+"))
naics.three.digit
[1]"541" "541" "410" "236" "611"
这里实际的期望输出是:
"541" "541" "236" "611"
类似地,对于两位数的输出,应该是:
"54" "54" "11" "23" "23" "61"
我假设str_extract_all
方法在这里分解,因为每个子串的长度都不同。有没有解决方法?任何帮助或指导表示赞赏。
我们可以在\\b
中使用单词边界\\d{3}
后跟3个数字(str_extract_all
)作为模式,它会跳过少于3个数字的数字
library(stringr)
str_extract_all(naics, "\\b\\d{3}")[[1]]
#[1] "541" "541" "236" "611"