从右边删除零并在数字的左边添加一些?

时间:2014-09-27 22:46:17

标签: regex r

假设我有以下向量

test<- c(374500, 2270400)

首先,我想删除零,以获得类似的内容:

test2<- c(3745, 22704)

然后,我想在左边添加零,以便有6位数。那部分我知道该怎么做:

test3 <- formatC(test2, width = 6, format = "d", flag = "0")

你能帮助我迈出第一步吗?

2 个答案:

答案 0 :(得分:7)

您可以使用正则表达式:

as.integer(sub("0*$", "", test))
# [1]  3745 22704

此外,这是一个有趣的使用递归:

remove_zeroes <- function(x) {
   x <- as.integer(x)
   i <- x %% 10L == 0
   if (any(i)) {
      x[i] <- x[i] / 10L
      Recall(x)
   } else x
}
remove_zeroes(c(123, 1230, 1230000))
# [1] 123 123 123

基准:

test <- sample.int(1e5)
library(microbenchmark)
microbenchmark(
   as.integer(sub("0*$", "", test)),
   as.integer(sub("0+$", "", test)),
   remove_zeroes(test))
# Unit: milliseconds
#                              expr       min        lq    median        uq       max neval
#  as.integer(sub("0*$", "", test)) 134.51669 138.91855 141.28812 145.96486 170.93705   100
#  as.integer(sub("0+$", "", test)) 113.91206 118.83564 123.42199 126.44162 179.03642   100
#               remove_zeroes(test)  38.01125  47.45385  49.79928  54.87592  89.05354   100

答案 1 :(得分:1)

晚会,但这是一个qdap方法:

test<- c(374500, 2270400)

library(qdap)
pad(as.numeric(rm_default(test, pattern="0+$")), 6, sort=FALSE)

## [1] "003745" "022704"