উত্তর:
আমি বেস আর এর কোনও কিছুর বিষয়ে অবগত নই, তবে এটি ব্যবহার করে কোনও ফাংশন করা সোজা-ফরওয়ার্ড 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"
@ এমডিএসএমনার পয়েন্ট হিসাবে এটি ভেক্টরাইজড। বিবেচনা:
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
করা হয়েছিল, সুতরাং এখন এনএ ইত্যাদির সাথে কাজ করা উচিত।
প্যাকেজ stri_sub
থেকে ফাংশন ব্যবহার করুন stringi
। শেষ থেকে সাবস্ট্রিং পেতে, নেতিবাচক সংখ্যা ব্যবহার করুন। উদাহরণগুলির জন্য নীচে দেখুন:
stri_sub("abcde",1,3)
[1] "abc"
stri_sub("abcde",1,1)
[1] "a"
stri_sub("abcde",-3,-1)
[1] "cde"
আপনি এই প্যাকেজটি গিথুব থেকে ইনস্টল করতে পারেন: https://github.com/Rexamine/stringi
এটি এখন CRAN- এ পাওয়া যায়, কেবল টাইপ করুন
install.packages("stringi")
এই প্যাকেজ ইনস্টল করতে।
str = 'This is an example'
n = 7
result = substr(str,(nchar(str)+1)-n,nchar(str))
print(result)
> [1] "example"
>
আর একটি যুক্তিসঙ্গত সরল উপায় হ'ল নিয়মিত প্রকাশ এবং ব্যবহার sub
:
sub('.*(?=.$)', '', string, perl=T)
সুতরাং, "একটি চরিত্র অনুসারে সমস্ত কিছু থেকে মুক্তি পান"। শেষের দিকে আরও অক্ষর দখল করতে, বর্ণনীর মুখের দৃ in়ে অনেকগুলি বিন্দু যুক্ত করুন:
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 টি অক্ষর বের করতে চাই। পদক্ষেপগুলি এখানে:
(1) অক্ষরগুলি বিভক্ত করুন
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))
আপনি শেষ কয়েকটি অক্ষর কীভাবে পাবেন তা নির্ধারণ করতে আপনি এনসিআর (স্ট্রিংঅফআইন্টারস্টেস্ট) এর সাথে খেলতে পারেন।
@ অ্যান্ড্রি সমাধানে সামান্য পরিবর্তনও পরিপূরক দেয়:
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"