কোনও প্যাটার্ন অনুসারে একটি স্ট্রস্ট্রিং বের করুন


136

ধরুন আমার কাছে স্ট্রিংয়ের একটি তালিকা রয়েছে:

string = c("G1:E001", "G2:E002", "G3:E003")

এখন আমি স্ট্রিং এর একটি ভেক্টর যে শুধুমাত্র অংশের কোলন পরে রয়েছে পেতে আশা করি ":", অর্থাত্ substring = c(E001,E002,E003)

এটি করার জন্য আর কি কোনও সুবিধাজনক উপায় নেই? ব্যবহার করছেন substr?

উত্তর:


238

এখানে কয়েকটি উপায় রয়েছে:

1) সাব

sub(".*:", "", string)
## [1] "E001" "E002" "E003"

2) স্টারস্প্লিট

sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"

3) পঠনযোগ্য

read.table(text = string, sep = ":", as.is = TRUE)$V2
## [1] "E001" "E002" "E003"

4) সাবস্ট্রিং

এটি ধরে নিয়েছে যে দ্বিতীয় অংশটি সর্বদা চতুর্থ অক্ষর থেকে শুরু হয় (যা প্রশ্নের উদাহরণের ক্ষেত্রে এটি):

substring(string, 4)
## [1] "E001" "E002" "E003"

4 এ) সাবস্ট্রিং / রেজেেক্স

যদি কোলন সর্বদা পরিচিত অবস্থানে না থাকে তবে আমরা এটি অনুসন্ধান করে (4) সংশোধন করতে পারি:

substring(string, regexpr(":", string) + 1)

5) strapplyc

strapplyc প্রথম অংশটি ফেরত দেয়:

library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"

6) read.dcf

এই শুধুমাত্র তখনই কাজ করে যদি কোলনের পূর্বে সাবস্ট্রিংগুলি অনন্য (যা তারা প্রশ্নের উদাহরণে থাকে)। এছাড়াও এটির পৃথককারীটি কোলন হওয়ার প্রয়োজন (যা এটি প্রশ্নে রয়েছে)। যদি কোনও আলাদা বিভাজক ব্যবহৃত হয় তবে আমরা subপ্রথমে একটি কোলন দিয়ে এটি প্রতিস্থাপন করতে ব্যবহার করতে পারি। উদাহরণস্বরূপ, যদি বিভাজক ছিল _তারপরstring <- sub("_", ":", string)

c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"

7) পৃথক

A এ) ব্যবহার করে tidyr::separateআমরা দুটি কলাম সহ একটি ডেটা ফ্রেম তৈরি করি, একটিটি কোলনের আগে অংশের জন্য এবং একটি পরে থাকে এবং তারপরে পরবর্তীটি বের করে আনে।

library(dplyr)
library(tidyr)
library(purrr)

DF <- data.frame(string)
DF %>% 
  separate(string, into = c("pre", "post")) %>% 
  pull("post")
## [1] "E001" "E002" "E003"

7 বি) পর্যায়ক্রমে separateকেবল postকলাম তৈরি করতে এবং তারপরে unlistএবং unnameফলাফল ডেটা ফ্রেম ব্যবহার করা যেতে পারে :

library(dplyr)
library(tidyr)

DF %>% 
  separate(string, into = c(NA, "post")) %>% 
  unlist %>%
  unname
## [1] "E001" "E002" "E003"

8) ছাঁটাই আমরা trimwsবাম দিকে শব্দের অক্ষর ছাঁটাই করতে ব্যবহার করতে পারি এবং তারপরে এটি আবার কোলনটি ছাঁটাই করতে ব্যবহার করতে পারি ।

trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"

বিঃদ্রঃ

ইনপুটটি stringধরে নেওয়া হয়:

string <- c("G1:E001", "G2:E002", "G3:E003")

আমার গলিত টেবিলে একটি পরিবর্তনক ছিল _যা বিভাজক হিসাবে ছিল এবং @ গ্রোথেনডিক উত্তরটির উপর ভিত্তি করে উপসর্গ এবং প্রত্যয়টির জন্য দুটি পৃথক ভেরিয়েবল তৈরি করেছিল: prefix <- sub("_.*", "", variable)এবং suffix <- sub(".*_", "", variable)
সোয়াহার্ট

এই আশ্চর্যজনক উত্তরের একটি মাইক্রোব্যাঙ্কমার্কিং দেখে ভাল লাগবে!
patL

25

উদাহরণস্বরূপ ব্যবহার gsubবাsub

    gsub('.*:(.*)','\\1',string)
    [1] "E001" "E002" "E003"

আপনি কি এই ব্যাখ্যা করতে পারেন '। * (* এবং ঠিক সেখানে কি? আমি কিছুটা আলাদা সেটিংয়ে এটি
পিটার প্যান

1
@ পিটারপান এটি কোলনের পরে উপস্থিত অক্ষরের গোষ্ঠীটিকে ক্যাপচার এবং রিটার্ন দেয়। যদি ম্যাচের স্ট্রিংগুলি আরও জটিল হয় এবং আপনি বেস বেসে থাকতে চান এটি ভাল কাজ করে।
ক্লার্ক


9

পার্টিতে দেরীতে, তবে উত্তরাধিকারের জন্য স্ট্রিংগার প্যাকেজ (জনপ্রিয় "tidyverse" প্যাকেজের জনপ্রিয় স্যুট অংশ) এখন স্ট্রিং হ্যান্ডলিংয়ের জন্য সুরেলা স্বাক্ষরের সাথে ফাংশন সরবরাহ করে:

string <- c("G1:E001", "G2:E002", "G3:E003")
# match string to keep
stringr::str_extract(string = string, pattern = "E[0-9]+")
# [1] "E001" "E002" "E003"

# replace leading string with ""
stringr::str_remove(string = string, pattern = "^.*:")
# [1] "E001" "E002" "E003"

2
কোলনের পরে সমস্ত কিছুর চেয়ে এটি কি ই দিয়ে শুরু হওয়া প্রথম সংখ্যাটি খুঁজে পাচ্ছে না?
মার্ক নীল


3

আপনি যদি ব্যবহার করেন data.tableতবে tstrsplit()এটি একটি প্রাকৃতিক পছন্দ:

tstrsplit(string, ":")[[2]]
[1] "E001" "E002" "E003"

3

Unglue প্যাকেজ একটি বিকল্প প্রদান করে, রেগুলার এক্সপ্রেশন সম্পর্কে কোন জ্ঞান সহজ ক্ষেত্রে প্রয়োজন হয়, আমরা করতে চাই:

# install.packages("unglue")
library(unglue)
string = c("G1:E001", "G2:E002", "G3:E003")
unglue_vec(string,"{x}:{y}", var = "y")
#> [1] "E001" "E002" "E003"

2019-11-06 এ ডিপেক্স প্যাকেজ (v0.3.0) দ্বারা নির্মিত

আরও তথ্য: https://github.com/moodymudskipper/unglue/blob/master/README.md

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