मैं एक स्ट्रिंग में एक डॉलर की राशि से सभी अल्पविराम लेकिन पिछले एक, यदि कोई हो, को दूर करने में रुचि रखता हूं। उदाहरण के लिए, मैं कहता हूं
x <- c("$1,450", "$1,254,345,", "$2,423,123")
मुझे क्या दिलचस्पी है कुछ इस तरह है:
x
## [1] "$1450" "$1254345," "$2423123"
इसलिए, मैं पहले जांचना चाहता हूं कि क्या बहुत अंत में अल्पविराम मौजूद है। यदि हाँ, तो मैं सभी को हटा दूंगा, लेकिन अंतिम एक। अगर अंत में कोई टीएन अल्पविराम नहीं है, तो मैं उन सभी को हटा देता हूं।
उत्तर:
जवाब के लिए 3 № 1regex
मददगार है
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