R,gsub(),在给定某些条件下将 "."替换为 ","

标签 r if-statement replace gsub

我有这样的数据

obs  Var1   
1    36.091  
2    14.678  
3    3.12

我的问题是我想将 "." 替换为 ","gsub(),但不是所有的observations,仅针对点 (".") 右侧有 3 个字符的观察结果。在这种情况下,观察 1 和 2。

我在想这样的事情:

if ( nchar(something indicating the characters to the right of ".") >= 3){
gsub(".",",",data[,1])
} 
else {}

我不知道这是否是正确的方法,但我没有想出另一种方法。

谢谢

最佳答案

您可以使用基于前瞻的正则表达式。仅当点后跟至少三个字符时,才会用逗号替换点。

> x <- c('36.091', '14.678', '3.12')
> gsub("\\.(?=.{3})", ",", x, perl=T)
[1] "36,091" "14,678" "3.12"
> df <- data.frame(obs=c(1,2,3), Var1=c('36.091', '14.678', '3.12'))
> df$Var1 <- gsub("\\.(?=.{3})", ",", df$Var1, perl=T)
> df
  obs   Var1
1   1 36,091
2   2 14,678
3   3   3.12

> gsub("\\.(.{3})", ",\\1", x)
[1] "36,091" "14,678" "3.12" 

如果您想要更准确一点,请将前瞻或捕获组中的点替换为 \\d,它与数字字符完全匹配。

gsub("\\.(?=\\d{3})", ",", x, perl=T)
gsub("\\.(\\d{3})", ",\\1", x)

关于R,gsub(),在给定某些条件下将 "."替换为 ",",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29202903/

相关文章:

r - 在点阵图形上使用回归线绘制 xyplot

Java if语句currentTimeMillis,检查特定时间是否已经过去

java - 其余搜索参数验证

python - 将回车转换为 HTML 换行符

字符串上的 MySQL、IFNULL()、COALESCE() 未替换

session : no process found - R Studio

r - 确定 tibble 是否分组

r - 设置网格中轴标签的格式

R:如何在向量上使用类似 "if"的函数但没有 "ifelse"因为如果没有它什么都不做

python - 替换正则表达式中的字符