我有一个数据框,我想对值做两件事:
我设法分别完成了这两项工作,但是我似乎无法将两者结合起来。
为了删除尾随的零,我使用了:
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$
,以便它也可以看到前面带有数字的零,但这会删除小数点后的数字,这不是我想要的。
答案 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