আর এর স্ট্রিং থেকে শেষ এন অক্ষরগুলি বের করা


271

আমি কীভাবে আর এর স্ট্রিং থেকে শেষ এন অক্ষর পেতে পারি? এসকিউএল রাইটস এর মতো কোনও ফাংশন আছে?

উত্তর:


280

আমি বেস আর এর কোনও কিছুর বিষয়ে অবগত নই, তবে এটি ব্যবহার করে কোনও ফাংশন করা সোজা-ফরওয়ার্ড 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"

1
স্ট্রিং প্যাকেজ ব্যবহার করুন। এটি এনএ এবং সমস্ত এনকোডিংয়ের সাথে দুর্দান্ত কাজ করে :)
বারটেকার্টানাস

nchar(x)লোকাল ভেরিয়েবলের দায়িত্ব দিয়ে দ্বিগুণ কল করা এড়ানো কি আরও দক্ষ হবে?
ডেভ জার্ভিস

206

আপনি যদি stringrপ্যাকেজটি ব্যবহার করতে আপত্তি করেন না str_subতবে সুবিধাজনক কারণ আপনি পশ্চাদপদ গণনা করতে নেতিবাচক ব্যবহার করতে পারেন:

x <- "some text in a string"
str_sub(x,-6,-1)
[1] "string"

অথবা, ম্যাক্স হিসাবে এই উত্তরের মন্তব্যে উল্লেখ করেছেন,

str_sub(x, start= -6)
[1] "string"

32
এছাড়াও, str_sub (x, start = -n) n টি শেষ অক্ষর পায়।
সর্বাধিক

2
স্ট্রিংর এনএর মান এবং সমস্ত এনকোডিংয়ের সাথে ভাল কাজ করে না। আমি দৃ strongly়ভাবে স্ট্রিং প্যাকেজটি পুনরুদ্ধার করছি :)
বারটেকটার্টানুস

3
আমি বিশ্বাস করি ব্যাকেন্ড হিসাবে stringrব্যবহার করে পুনরায় তৈরি stringiকরা হয়েছিল, সুতরাং এখন এনএ ইত্যাদির সাথে কাজ করা উচিত।
এম-ডিজে

44

প্যাকেজ 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")

এই প্যাকেজ ইনস্টল করতে।



12

আর একটি যুক্তিসঙ্গত সরল উপায় হ'ল নিয়মিত প্রকাশ এবং ব্যবহার 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)

2
সমস্ত চেহারা-ইত্যাদি ইত্যাদি এড়াতে আপনি কেবলই করতে পারেনregmatches(x, regexpr(".{6}$", x))
থেটমেল

10

আপডেট : হিসাবে 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)" বলতে চাইছেন
Xu Wang

8

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!"

6

এর বিকল্পটি substrহ'ল স্ট্রিংটিকে একক অক্ষরের তালিকায় বিভক্ত করা এবং প্রক্রিয়া করা:

N <- 2
sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), N)

6
আমি অনুভব করি একটি সিস্টেম.টাইম () যুদ্ধের সূত্রপাত :-)
কার্ল উইথথফট

4

আমি 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 হয়।


3

এর আগে কেউ আমার মতো একই সমাধান ব্যবহার করে তবে নীচের মত ভাবতে আমার পক্ষে সহজ লাগে:

> 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))

এটি পছন্দসই হিসাবে শেষ অক্ষর আনবে।


3

এটা চেষ্টা কর:

x <- "some text in a string"
n <- 5
substr(x, nchar(x)-n, nchar(x))

এটি চিৎকার করে:

[1] "string"

1

আমি একটি স্ট্রিংয়ের শেষ চরিত্রটি পেতে নিম্নলিখিত কোডটি ব্যবহার করেছি।

    substr(output, nchar(stringOfInterest), nchar(stringOfInterest))

আপনি শেষ কয়েকটি অক্ষর কীভাবে পাবেন তা নির্ধারণ করতে আপনি এনসিআর (স্ট্রিংঅফআইন্টারস্টেস্ট) এর সাথে খেলতে পারেন।


0

@ অ্যান্ড্রি সমাধানে সামান্য পরিবর্তনও পরিপূরক দেয়:

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"

0

কেবলমাত্র যদি ক্ষেত্রে বিভিন্ন বর্ণের বাছাই করা দরকার:

# For example, to get the date part from the string

substrRightRange <- function(x, m, n){substr(x, nchar(x)-m+1, nchar(x)-m+n)}

value <- "REGNDATE:20170526RN" 
substrRightRange(value, 10, 8)

[1] "20170526"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.