/ / आर में सभी अंतिम अल्पविराम कैसे निकालें - आर, अल्पविराम, strsplit

आर-आर, कॉमा, स्ट्रस्प्लिट में अंतिम कॉमा के अलावा सभी को कैसे हटाएं

मैं एक स्ट्रिंग में एक डॉलर की राशि से सभी अल्पविराम लेकिन पिछले एक, यदि कोई हो, को दूर करने में रुचि रखता हूं। उदाहरण के लिए, मैं कहता हूं

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

मुझे क्या दिलचस्पी है कुछ इस तरह है:

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

इसलिए, मैं पहले जांचना चाहता हूं कि क्या बहुत अंत में अल्पविराम मौजूद है। यदि हाँ, तो मैं सभी को हटा दूंगा, लेकिन अंतिम एक। अगर अंत में कोई टीएन अल्पविराम नहीं है, तो मैं उन सभी को हटा देता हूं।

उत्तर:

जवाब के लिए 3 № 1

regex मददगार है

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

रेगेक्स पैटर्न की व्याख्या ",(?!$)"

, सभी अल्पविराम से मेल खाता है
(?!$) नकारात्मक लुकहेड, कॉमा को बाहर करें जो एंड-ऑफ-स्ट्रिंग पर हैं $


उत्तर № 2 के लिए 1

यहाँ 2 समाधान दिए गए हैं

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

एक अंक के बाद अल्पविराम को अंक (कब्जा समूह) के साथ प्रतिस्थापित किया जाता है

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

कॉमा को प्रतिस्थापित करने के लिए एक अंक का अनुसरण किया जाना चाहिए (सकारात्मक रूपांतर)

दोनों ही मामलों में \d के साथ प्रतिस्थापित किया जा सकता है . यदि आप अंकों के बजाय किसी प्रतीक का मिलान करना चाहते हैं:

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

जवाब के लिए 0 № 3

आप इसे मिला कर प्राप्त कर सकते हैं gsub() तथा str_sub() एक में ifelse()। यहाँ एक उदाहरण है

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