舍入字符串中的所有浮点数

时间:2016-07-05 12:54:36

标签: r replace

我正在尝试将字符串中的所有浮点数替换为舍入到2位小数的相同数字。例如,<ins:Parameter name="TRIGGER_VALUE" value="1"/> 应该变为"Hello23.898445World1.12212"

我可能会找到数字&#39; "Hello23.90World1.12"的位置,但不知道如何用圆形原稿替换它们。

3 个答案:

答案 0 :(得分:3)

我们可以使用gsubfn

library(gsubfn)
gsubfn("([0-9.]+)", ~format(round(as.numeric(x), 2), nsmall=2), str1)
#[1] "Hello23.90World1.12"

数据

str1 <- "Hello23.898445World1.12212"

答案 1 :(得分:3)

或使用stringr

library(stringr)
x <- "Hello23.898445World1.12212"

r1 <- round(as.numeric(str_extract_all(x, "-*\\d+\\.*\\d*")[[1]]),2)
# [1] 23.90  1.12
r2 <- strsplit(gsub("\\d", "", x),"\\.")[[1]]
# [1] "Hello" "World"
paste0(r2, format(r1, digits = 3, trim=T), collapse = "")

# [1] "Hello23.90World1.12"

答案 2 :(得分:0)

不使用包进行字符串操作的解决方案:

同样归功于@akrun format(., nsmall=2)是这个解决方案的诀窍。

输入字符串

stringi <- "Hello23.898445World1.12212"

设置小数位数

dp <- 2 #decimal places

计算

strsplit(x = stringi,split = "(?<=[^0-9.])(?=\\d)|(?<=\\d)(?=[^0-9.])",perl=T) %>%
    unlist %>% 
    lapply(function(x){if(!is.na(as.numeric(x)))x<-round(as.numeric(x),dp)%>%format(nsmall=dp);x}) %>%
    paste(collapse="")

结果:

#[1] "Hello23.90World1.12"