R使用带通配符的gsub删除部分字符串
R remove part of string using gsub with wildcard
我有一个数据框,我想对其中的值做两件事:
- 添加一个space作为千位分隔符
- 删除小数点后的尾随零
我设法分别做了这两件事,但我似乎无法将两者结合起来。
为了删除尾随零,我使用了:
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$
以便它也查看前面有数字的零,但是这会删除小数点后的数字,这不是我想要的。
这可行,但您的号码将转换为 strings/character!
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
您可以使用参数 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"
或者使用format
的trim
参数:
format(value, big.mark=" ", drop0trailing=TRUE, trim = TRUE)
# [1] "1 234.5" "1" "12.34"
我有一个数据框,我想对其中的值做两件事:
- 添加一个space作为千位分隔符
- 删除小数点后的尾随零
我设法分别做了这两件事,但我似乎无法将两者结合起来。
为了删除尾随零,我使用了:
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$
以便它也查看前面有数字的零,但是这会删除小数点后的数字,这不是我想要的。
这可行,但您的号码将转换为 strings/character!
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
您可以使用参数 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"
或者使用format
的trim
参数:
format(value, big.mark=" ", drop0trailing=TRUE, trim = TRUE)
# [1] "1 234.5" "1" "12.34"