【发布时间】:2019-01-24 13:01:30
【问题描述】:
我有一个数据框,我想对值做两件事:
- 添加一个空格作为千位分隔符
- 删除小数点后的尾零
我设法分别做这两件事,但我似乎无法将两者结合起来。
为了删除我使用的尾随零:
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$,以便它还可以查看前面带有数字的零,但这会删除小数点后的数字,这不是我想要的。
【问题讨论】:
-
你想要一个look-behind,或者你也可以使用捕获组 (\\..*)0$ 替换为 \\1
-
也许
format中的drop0trailing选项可以满足您的要求:format(x = df$value, big.mark = " ", drop0trailing = T)