使用R中的正则表达式将空格替换为数字

使用R中的正则表达式将空格替换为数字,r,regex,data.table,stringr,R,Regex,Data.table,Stringr,以下是数据表 df <- data.table(id=c(1,2,3,4), variable=c("250","250.1","250.11","E70.9")) df id variable 1: 1 250 2: 2 250.1 3: 3 250.11 4: 4 E70.9 第一部分正在工作,我可以用250.00替换250。当我尝试使用stringsr包和regex时

以下是数据表

df <- data.table(id=c(1,2,3,4),
  variable=c("250","250.1","250.11","E70.9"))
df
id variable
1:  1      250
2:  2    250.1
3:  3   250.11
4:  4   E70.9
第一部分正在工作,我可以用
250.00
替换
250
。当我尝试使用
stringsr
包和
regex
时,它没有成功。最后,我想知道这些结果

id variable
1:  1   250.00
2:  2   250.10
3:  3   250.11
4:  4   E70.9

我应该改变什么来正确使用
stringr
?在
数据表中是否有更好的解决方案?

我们可以使用
sprintf
。通过检查“变量”是否以“250”开头,使用
case\u创建逻辑条件,然后使用
sprintf
格式化这些元素,或者返回“变量”

library(dplyr)
df %>%
    mutate(variable = case_when(str_detect(variable, '^250')
       ~ sprintf('%.2f', as.numeric(variable)), TRUE ~ variable))

或使用
base R

i1 <- grepl('^250', df$variable)
df$variable[i1] <- sprintf('%.2f', as.numeric(df$variable[i1]))

i1我们可以使用
sprintf
。通过检查“变量”是否以“250”开头,使用
case\u创建逻辑条件,然后使用
sprintf
格式化这些元素,或者返回“变量”

library(dplyr)
df %>%
    mutate(variable = case_when(str_detect(variable, '^250')
       ~ sprintf('%.2f', as.numeric(variable)), TRUE ~ variable))

或使用
base R

i1 <- grepl('^250', df$variable)
df$variable[i1] <- sprintf('%.2f', as.numeric(df$variable[i1]))

i1A
data.表格
备选方案:


funcA
data.表格
备选方案:


func您可以通过以下方式使用
str\u replace

library(data.table)

df[, variable := stringr::str_replace(variable,'^250.*', function(m) 
                 sprintf('%.2f', as.numeric(m)))]
df
#   id variable
#1:  1   250.00
#2:  2   250.10
#3:  3   250.11
#4:  4    E70.9

str\u replace
仅替换满足
模式
参数的值。

您可以通过以下方式使用
str\u replace

library(data.table)

df[, variable := stringr::str_replace(variable,'^250.*', function(m) 
                 sprintf('%.2f', as.numeric(m)))]
df
#   id variable
#1:  1   250.00
#2:  2   250.10
#3:  3   250.11
#4:  4    E70.9
str\u replace
只替换那些满足
模式
参数的值