假设我有以下向量
test<- c(374500, 2270400)
首先,我想删除零,以获得类似的内容:
test2<- c(3745, 22704)
然后,我想在左边添加零,以便有6位数。那部分我知道该怎么做:
test3 <- formatC(test2, width = 6, format = "d", flag = "0")
你能帮助我迈出第一步吗?
答案 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"