R 根据数字位置拆分数字

R 根据数字位置拆分数字,r,split,digits,R,Split,Digits,我正在尝试创建一个新变量,该变量将存储tx每个数字的第二、第三和第四位以及最后三位数字。例如,tx中的第一个数字在new中为812500 是我干的 tx<-c(4812129004534500, 6430650557835, 579900098554, 382183224511777, 49057595473648551, 64951444098766, 649544543781, 87567909876421) new <- sapply(tx, function(x) subst

我正在尝试创建一个新变量,该变量将存储tx每个数字的第二、第三和第四位以及最后三位数字。例如,tx中的第一个数字在new中为812500

是我干的

tx<-c(4812129004534500, 6430650557835, 579900098554, 382183224511777, 49057595473648551, 64951444098766, 649544543781, 87567909876421)
new <- sapply(tx, function(x) substring(x, first=c(2,3,4), last=3))
但是输出是不受欢迎的。

gsub和下面的正则表达式模式可以工作

什么是:

它选择大括号之间的零件作为组。 -第一组是数字2、3和4 -第二组是最后三位数字 然后用group1+group2替换所有内容

gsub( "^\\d(\\d{3}).*(\\d{3}$)", "\\1\\2", tx )
[1] "812500" "430835" "799554" "821777" "905552" "495766" "495781" "756421"
试一试

如@jay.sf所述,上述内容的变化

as.numeric(paste0(substr(tx, 2, 4), substring(tx, nchar(tx) - 2)))

啊,很好的一个…即将发布sub.{2}.{3}.*.{3}$,\\1\\2,tx@RonakShah最后我终于比你快了。不得不等了一年左右-@温佩尔:谢谢。。如果第一组包含数字12、13、14,它会发生什么变化?@Julia你怎么知道第一个数字是12,而不是第二个数字的1和2?
as.numeric(paste0(substr(tx, 2, 4), substring(tx, nchar(tx) - 2)))