/ / Comment supprimer tout sauf la dernière virgule dans R - r, virgule, strsplit

Comment supprimer toutes les virgules sauf la dernière en R - r, virgule, strsplit

Je suis intéressé à supprimer toutes les virgules, sauf la dernière, le cas échéant, d'un montant en dollars dans une chaîne. Par exemple, disons que j'ai

x <- c("$1,450", "$1,254,345,", "$2,423,123")

Ce qui m’intéresse est quelque chose comme ça:

x
## [1] "$1450" "$1254345," "$2423123"

Donc, je veux d’abord vérifier s’il existe une virgule à la toute fin. Si oui, je supprimerai tout sauf le dernier. S'il n'y a pas une virgule à la fin, je les enlève tout simplement.

Réponses:

3 pour la réponse № 1

regex est utile

gsub(",(?!$)", "", x, perl=TRUE)
# "$1450"     "$1254345," "$2423123"

Explication du motif regex ",(?!$)"

, correspond à toutes les virgules
(?!$) lookahead négatif, exclut les virgules en fin de chaîne $


1 pour la réponse № 2

Voici 2 solutions

gsub(",(\d)", "\1", x)

une virgule suivie d'un chiffre est remplacée par le chiffre (groupe de capture)

gsub(",(?=\d)", "", x, perl = T)

une virgule doit être suivie d'un chiffre à substituer (aspect positif)

Dans les deux cas, le \d peut être remplacé par . si vous souhaitez faire correspondre un symbole à la place, si les chiffres:

gsub(",(.)", "\1", x)
gsub(",(?=.)", "", b, perl = T)

0 pour la réponse № 3

Vous pouvez y arriver en combinant gsub() et str_sub() dans un ifelse(). Voici un exemple

x1 <- c("$1,450", "$1,254,345,", "$2,423,123")
x1
library(stringr)
x2 <- ifelse(str_sub(x1, -1, nchar(x1)) == ",",
paste0(gsub(",", "", str_sub(x1, 1, nchar(x1)-1)), ","),
gsub(",", "", str_sub(x1, 1, nchar(x1))))
x2