簡體   English   中英

R使用帶通配符的gsub刪除字符串的一部分

[英]R remove part of string using gsub with wildcard

我有一個數據框,我想對值做兩件事:

  1. 添加空格作為千​​位分隔符
  2. 刪除小數點后的de尾隨零

我設法分別完成了這兩項工作,但是我似乎無法將兩者結合起來。

為了刪除尾隨零,我使用了:

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$以便它也以零開頭查找數字,但這會刪除小數點后的數字,這不是我想要的。

您可以使用參數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"

或使用formattrim參數:

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

這將起作用,但是您的數字將轉換為字符串/字符!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM