R使用带通配符的gsub删除字符串的一部分

时间:2019-01-24 13:01:31

标签: r gsub zero trailing

我有一个数据框,我想对值做两件事:

  1. 添加空格作为千​​位分隔符
  2. 删除小数点后的尾随零

我设法分别完成了这两项工作,但是我似乎无法将两者结合起来。

为了删除尾随的零,我使用了:

cat <- c("A", "B", "C")
value <- c(1234.5, 1, 12.34)
df <- data.frame(cat, value)

df$value2 <- gsub("\\.00$","",df$value)
df
  cat   value value2
1   A 1234.50 1234.5
2   B    1.00      1
3   C   12.34  12.34

然后添加我使用的千位分隔符:

df$value2 <- format(df$value, big.mark=" ")
df
  cat   value   value2
1   A 1234.50 1 234.50
2   B    1.00     1.00
3   C   12.34    12.34

现在,我希望将两者结合起来,但是如果使用以下代码来做到这一点:

df$value2 <- gsub("\\.00$","",format(df$value, big.mark=" "))
df
  cat   value   value2
1   A 1234.50 1 234.50
2   B    1.00        1
3   C   12.34    12.34

仅在以两个零结尾的情况下才删除尾随的零。我试图添加|\\..*0$,以便它也可以看到前面带有数字的零,但这会删除小数点后的数字,这不是我想要的。

2 个答案:

答案 0 :(得分:2)

您可以使用参数drop0trailing

format(value, big.mark=" ", drop0trailing=TRUE)
# [1] "1 234.5" "   1"    "  12.34"

也可以与formatC一起使用,不同之处在于,默认情况下您不会得到前导空格:

formatC(value, big.mark=" ", drop0trailing=TRUE)
# [1] "1 234" "1"     "12.34"

或使用trim的{​​{1}}参数:

format

答案 1 :(得分:1)

这将起作用,但是您的数字将转换为字符串/字符!

df$value2 <- gsub("0+$|\\.0+$","", as.character( format(df$value, big.mark=" ")))

#   cat   value   value2
# 1   A 1234.50  1 234.5
# 2   B    1.00        1
# 3   C   12.34    12.34