मैं एक स्ट्रिंग का हिस्सा कैसे निकालूं? उदाहरण के लिए ATGAS_1121मैं पहले सब कुछ निकालना चाहता हूं _।
जवाबों:
नियमित अभिव्यक्ति का उपयोग करें। इस मामले में, आप उपयोग कर सकते हैं gsub:
gsub("^.*?_","_","ATGAS_1121")
[1] "_1121"
यह नियमित अभिव्यक्ति स्ट्रिंग (^), किसी भी वर्ण () को शून्य या अधिक बार (*), और अंडरस्कोर (_) की शुरुआत से मेल खाती है। ? मैच को "आलसी" बनाता है ताकि यह केवल पहले अंडरस्कोर के रूप में मैच हो। उस मैच को सिर्फ अंडरस्कोर से बदल दिया जाता है। ?regexअधिक विवरण और संदर्भ के लिए देखें
आप उपयोग कर सकते हैं एक अंतर्निहित इस के लिए, strsplit :
> s = "TGAS_1121"
> s1 = unlist(strsplit(s, split='_', fixed=TRUE))[2]
> s1
[1] "1121"
strsplit सूची के रूप में विभाजित पैरामीटर पर पार्स किए गए स्ट्रिंग के दोनों टुकड़ों को लौटाता है । शायद यह नहीं है कि आप क्या चाहते हैं, इसलिए कॉल को अनलिस्ट में लपेटें , फिर उस सरणी को अनुक्रमित करें ताकि वेक्टर में दो तत्वों में से केवल दूसरा वापस आ जाए।
अंत में, यह निर्धारित करने के लिए निर्धारित पैरामीटर को TRUE पर सेट किया जाना चाहिए कि विभाजित पैरामीटर एक नियमित अभिव्यक्ति नहीं है, बल्कि एक शाब्दिक मिलान चरित्र है।
यहाँ एक वेक्टर है strsplitतो sइसका समाधान है:
> s <- c("TGAS_1121", "MGAS_1432")
> s1 <- sapply(strsplit(s, split='_', fixed=TRUE), function(x) (x[2]))
> s1
[1] "1121" "1432"
शायद सबसे सहज समाधान शायद stringrफ़ंक्शन का उपयोग करना है str_removeजो इससे भी आसान है str_replaceक्योंकि इसमें 2 के बजाय केवल 1 तर्क है।
आपके उदाहरण में एकमात्र मुश्किल हिस्सा यह है कि आप अंडरस्कोर रखना चाहते हैं, लेकिन इसके संभावित: आपको नियमित अभिव्यक्ति से मेल खाना चाहिए जब तक कि यह निर्दिष्ट स्ट्रिंग पैटर्न नहीं पाता है (?=pattern)।
उदाहरण देखें:
strings = c("TGAS_1121", "MGAS_1432", "ATGAS_1121")
strings %>% stringr::str_remove(".+?(?=_)")
[1] "_1121" "_1432" "_1121"
यहां पैकेज strsplitका उपयोग करके डेटाफ़्रेम का समाधानdplyr
col1 = c("TGAS_1121", "MGAS_1432", "ATGAS_1121")
col2 = c("T", "M", "A")
df = data.frame(col1, col2)
df
col1 col2
1 TGAS_1121 T
2 MGAS_1432 M
3 ATGAS_1121 A
df<-mutate(df,col1=as.character(col1))
df2<-mutate(df,col1=sapply(strsplit(df$col1, split='_', fixed=TRUE),function(x) (x[2])))
df2
col1 col2
1 1121 T
2 1432 M
3 1121 A
gsub("^.*_","_","ATGAS_1121_xxx")। अब तय हो गया।