所以我有一个产品项目描述列表。我把它加载到R.大多数这些描述完全是胡说八道,我们正在尝试从中提取一个不错的项目代码。
我可以在R中使用正则表达式来创建一个只有列表中的整数值的新向量,而不是逐行进行吗?
我现在有大部分代码
JJ <- read.csv2(file.choose(),header= TRUE)
JJ$X <- gsub(pattern = "[0-9]+", replacement = "",
x = JJ$LGY_DHB_ITEM_DESCRIPTION, ignore.case = TRUE)
但我不确定在替换论证中应该放什么。
答案 0 :(得分:1)
您可以尝试使用空字符串替换非(gsub("[^[:digit:]]*", "", 'PRIVATE CONTRACT INV 710456354')
[1] "710456354"
)数字(gsub("[^[:digit:]]*", "", 'PRIVATE 123 CONTRACT INV 710456354')
[1] "123710456354"
)字符:
JJ <- data.frame(LGY_DHB_ITEM_DESCRIPTION=c('PRIVATE CONTRACT INV 710456354', 'PRIVATE 123 CONTRACT INV 710456354'))
m <- gregexpr("[0-9]*", JJ$LGY_DHB_ITEM_DESCRIPTION)
all_m <- regmatches(JJ$LGY_DHB_ITEM_DESCRIPTION, m)
JJ$X <- mapply(FUN =function(stri,idx) stri[idx],all_m, sapply(lapply(all_m,nchar),which.max))
JJ
LGY_DHB_ITEM_DESCRIPTION X
1 PRIVATE CONTRACT INV 710456354 710456354
2 PRIVATE 123 CONTRACT INV 710456354 710456354
但如果你的字符串中有多个数字,那么这不会起作用:
{{1}}
您可以尝试在每个字符串中找到最长的商业广告:
{{1}}