আমি একটি স্ট্রিংয়ের অংশটি কীভাবে সরিয়ে ফেলব? উদাহরণস্বরূপ ATGAS_1121আমি আগে সবকিছু মুছে ফেলতে চাই _।
উত্তর:
নিয়মিত এক্সপ্রেশন ব্যবহার করুন। এই ক্ষেত্রে, আপনি ব্যবহার করতে পারেন gsub:
gsub("^.*?_","_","ATGAS_1121")
[1] "_1121"
এই নিয়মিত অভিব্যক্তিটি স্ট্রিং (^) এর শুরুর সাথে, কোনও বর্ণ (।) শূন্য বা তার বেশি বার (*) এবং আন্ডারস্কোর (_) এর সাথে মেলে। দ্য ? ম্যাচটিকে "অলস" করে তোলে যাতে এটি কেবল ম্যাচগুলি প্রথম আন্ডারস্কোরের থেকে অনেক দূরে। এই ম্যাচটি কেবল একটি আন্ডারস্কোর দিয়ে প্রতিস্থাপন করা হয়। দেখুন ?regexআরো বিস্তারিত জানার এবং তথ্যসূত্র জন্য
আপনি এর জন্য একটি অন্তর্নির্মিত ব্যবহার করতে পারেন, স্টারস্প্লিট :
> s = "TGAS_1121"
> s1 = unlist(strsplit(s, split='_', fixed=TRUE))[2]
> s1
[1] "1121"
স্টারস্প্লিট স্প্লিট প্যারামিটারে পার্সযুক্ত স্ট্রিংয়ের উভয় টুকরোকে তালিকা হিসাবে ফিরিয়ে দেয় । এটি সম্ভবত আপনি যা চান তা নয়, সুতরাং কলটিকে তালিকাভুক্তিতে মোড়ক করুন , তারপরে সেই অ্যারেটিকে সূচক করুন যাতে ভেক্টরের দুটি উপাদানগুলির মধ্যে কেবল দ্বিতীয়টিই ফিরে আসে।
অবশেষে, স্পষ্ট প্যারামিটারটি নিয়মিত প্রকাশ নয়, তবে আক্ষরিক মিলের অক্ষর হিসাবে চিহ্নিত করতে নির্দিষ্ট প্যারামিটারটি সত্য হিসাবে সেট করা উচিত।
আপনি যদি একটি পরিশ্রমী ধরণের ব্যক্তি হন তবে এখানে স্ট্রিংয়ের সমাধান রয়েছে:
R> library(stringr)
R> strings = c("TGAS_1121", "MGAS_1432", "ATGAS_1121")
R> strings %>% str_replace(".*_", "_")
[1] "_1121" "_1432" "_1121"
# Or:
R> strings %>% str_replace("^[A-Z]*", "")
[1] "_1121" "_1432" "_1121"
ভেক্টর 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_replace2 এর পরিবর্তে কেবলমাত্র 1 টি যুক্তি রয়েছে বলে এটি আরও সহজ than
আপনার উদাহরণের একমাত্র কৌতুকপূর্ণ অংশটি হ'ল আপনি আন্ডারস্কোরটি রাখতে চান তবে এটি সম্ভব: নির্দিষ্ট স্ট্রিং প্যাটার্নটি না পাওয়া পর্যন্ত আপনাকে অবশ্যই নিয়মিত এক্সপ্রেশনটি মেলাতে হবে (?=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"),। এখন স্থির।