जवाबों:
मैं आधार आर में कुछ भी के बारे में पता नहीं कर रहा हूँ, लेकिन यह सीधी-सपाट का उपयोग कर यह करने के लिए एक समारोह बनाने के लिए है substr
और nchar
:
x <- "some text in a string"
substrRight <- function(x, n){
substr(x, nchar(x)-n+1, nchar(x))
}
substrRight(x, 6)
[1] "string"
substrRight(x, 8)
[1] "a string"
जैसा कि @mdsumner बताते हैं, यह सदिश है। विचार करें:
x <- c("some text in a string", "I really need to learn how to count")
substrRight(x, 6)
[1] "string" " count"
nchar(x)
स्थानीय चर को निर्दिष्ट करके दो बार कॉल करने से बचना अधिक कुशल होगा ?
यदि आपको stringr
पैकेज का उपयोग करने में कोई आपत्ति नहीं है , तो str_sub
यह आसान है क्योंकि आप पिछड़े की गणना करने के लिए नकारात्मक का उपयोग कर सकते हैं:
x <- "some text in a string"
str_sub(x,-6,-1)
[1] "string"
या, जैसा कि मैक्स इस जवाब के लिए एक टिप्पणी में बताते हैं,
str_sub(x, start= -6)
[1] "string"
stringr
उपयोग किया गया था stringi
, इसलिए अब NA आदि के साथ काम करना चाहिए।
पैकेज stri_sub
से फ़ंक्शन का उपयोग करें stringi
। अंत से प्रतिस्थापित करने के लिए, नकारात्मक संख्याओं का उपयोग करें। उदाहरणों के लिए नीचे देखें:
stri_sub("abcde",1,3)
[1] "abc"
stri_sub("abcde",1,1)
[1] "a"
stri_sub("abcde",-3,-1)
[1] "cde"
आप इस पैकेज को github: https://github.com/Rexamine/stringi से इंस्टॉल कर सकते हैं
यह अभी CRAN पर उपलब्ध है, बस टाइप करें
install.packages("stringi")
इस पैकेज को स्थापित करने के लिए।
एक और यथोचित सीधा तरीका है नियमित भावों का उपयोग करना और sub
:
sub('.*(?=.$)', '', string, perl=T)
तो, "एक चरित्र के बाद सब कुछ से छुटकारा पाएं"। अंत में अधिक वर्णों को हथियाने के लिए, लुकहेड एसेरशन में कई डॉट्स जोड़ें:
sub('.*(?=.{2}$)', '', string, perl=T)
जहां का .{2}
अर्थ है ..
, या "कोई भी दो वर्ण", तो इसका अर्थ है "दो वर्णों के बाद आने वाली हर चीज से छुटकारा पाना"।
sub('.*(?=.{3}$)', '', string, perl=T)
तीन वर्णों इत्यादि के लिए, आप वर्णों की संख्या को एक चर के साथ निर्धारित कर सकते हैं, लेकिन आपको paste
चर मान नियमित अभिव्यक्ति स्ट्रिंग में रखना होगा :
n = 3
sub(paste('.+(?=.{', n, '})', sep=''), '', string, perl=T)
regmatches(x, regexpr(".{6}$", x))
अद्यतन : जैसा कि mdsumner ने नोट किया है , मूल कोड पहले से ही सदिश है क्योंकि पदार्थ है। अधिक सावधान रहना चाहिए था।
और यदि आप एक वेक्टर संस्करण चाहते हैं ( एंड्री कोड पर आधारित )
substrRight <- function(x, n){
sapply(x, function(xx)
substr(xx, (nchar(xx)-n+1), nchar(xx))
)
}
> substrRight(c("12345","ABCDE"),2)
12345 ABCDE
"45" "DE"
ध्यान दें कि मैंने वर्ण प्राप्त (nchar(x)-n)
करने के (nchar(x)-n+1)
लिए बदल दिया है n
।
(nchar(x)-n)
से (nchar(x)-n+1)
"
substring()
फ़ंक्शन का उपयोग करके एक सरल आधार आर समाधान (जो जानता था कि यह फ़ंक्शन भी मौजूद है?):
RIGHT = function(x,n){
substring(x,nchar(x)-n+1)
}
यह मूल रूप से substr()
नीचे का लाभ उठाता है, लेकिन इसका डिफ़ॉल्ट अंत मूल्य 1,000,000 है।
उदाहरण:
> RIGHT('Hello World!',2)
[1] "d!"
> RIGHT('Hello World!',8)
[1] "o World!"
इसका एक विकल्प substr
स्ट्रिंग को एकल वर्णों की सूची में विभाजित करना है और प्रक्रिया है:
N <- 2
sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), N)
मैं substr
भी उपयोग करता हूं , लेकिन एक अलग तरीके से। मैं "मुझे अपना भोजन दो" के अंतिम 6 अक्षर निकालना चाहते हैं। यहाँ कदम हैं:
(१) पात्रों को विभाजित करें
splits <- strsplit("Give me your food.", split = "")
(२) अंतिम ६ वर्ण निकालें
tail(splits[[1]], n=6)
आउटपुट:
[1] " " "f" "o" "o" "d" "."
प्रत्येक वर्ण तक पहुँचा जा सकता है splits[[1]][x]
, जहाँ x 1 से 6 है।
इससे पहले कि कोई मेरे लिए एक समान समाधान का उपयोग करता है, लेकिन मुझे नीचे के रूप में सोचना आसान है:
> text<-"some text in a string" # we want to have only the last word "string" with 6 letter
> n<-5 #as the last character will be counted with nchar(), here we discount 1
> substr(x=text,start=nchar(text)-n,stop=nchar(text))
यह अंतिम पात्रों को इच्छानुसार लाएगा।
मैंने एक स्ट्रिंग के अंतिम वर्ण को प्राप्त करने के लिए निम्नलिखित कोड का उपयोग किया।
substr(output, nchar(stringOfInterest), nchar(stringOfInterest))
आप अंतिम कुछ वर्ण प्राप्त करने के तरीके का पता लगाने के लिए nchar (stringOfInterest) के साथ खेल सकते हैं।
@ कृषि समाधान पर थोड़ा संशोधन भी पूरक देता है:
substrR <- function(x, n) {
if(n > 0) substr(x, (nchar(x)-n+1), nchar(x)) else substr(x, 1, (nchar(x)+n))
}
x <- "moSvmC20F.5.rda"
substrR(x,-4)
[1] "moSvmC20F.5"
यही मैं ढूंढ रहा था। और यह बाईं ओर को आमंत्रित करता है:
substrL <- function(x, n){
if(n > 0) substr(x, 1, n) else substr(x, -n+1, nchar(x))
}
substrL(substrR(x,-4),-2)
[1] "SvmC20F.5"