স্ট্রিংয়ের মধ্যে নির্দিষ্ট অক্ষরগুলি প্রতিস্থাপন করুন


262

আমি কোনও ভেক্টরের মধ্যে স্ট্রিং থেকে নির্দিষ্ট অক্ষরগুলি মুছে ফেলতে চাই, এক্সেলের অনুসন্ধান এবং প্রতিস্থাপন বৈশিষ্ট্যের অনুরূপ ।

আমি যে ডেটা দিয়ে শুরু করি তা এখানে:

group <- data.frame(c("12357e", "12575e", "197e18", "e18947")

আমি প্রথম কলাম দিয়ে শুরু করি; এর অপসারণ করে আমি দ্বিতীয় কলামটি উত্পাদন করতে চাই e:

group       group.no.e
12357e      12357
12575e      12575
197e18      19718
e18947      18947

উত্তর:


399

একটি নিয়মিত প্রকাশ এবং ফাংশন সহ gsub():

group <- c("12357e", "12575e", "197e18", "e18947")
group
[1] "12357e" "12575e" "197e18" "e18947"

gsub("e", "", group)
[1] "12357" "12575" "19718" "18947"

কি gsubএখানে আছে প্রতিটি সংঘটন প্রতিস্থাপন করতে হয় "e"একটি খালি স্ট্রিং সঙ্গে ""


আরও সাহায্যের জন্য দেখুন ?regexpবা দেখুন gsub


15
fixed = TRUEএটি দ্রুত করতে হবে।
ধনী স্ক্রিভেন

4
@ রিচস্প্রিভেন আপনি খুব শীঘ্রই কেন তা বিস্তারিত জানাতে পারেন?
সজ্জিত

6
fixed=TRUEআর কে নিয়মিত এক্সপ্রেশন ব্যবহার করা থেকে বিরত করে, যা আরও নমনীয় প্যাটার্ন মেলানোর অনুমতি দেয় তবে গণনা করতে সময় নেয়। যদি কেবলমাত্র একটিমাত্র ধ্রুব স্ট্রিং "ই" মুছে ফেলা হয় তবে সেগুলি প্রয়োজনীয় নয়।
mm689

চান sub("e", "", group)একই ফলাফল করতে পারেন কি?
ম্যাথিউস সান্টানা

কেবলমাত্র eপ্রতিটি উপাদানটিতে এটি প্রথমটি প্রতিস্থাপন করবে
সিন্ড্রি_বলদুর

47

নিয়মিত প্রকাশগুলি আপনার বন্ধু:

R> ## also adds missing ')' and sets column name
R> group<-data.frame(group=c("12357e", "12575e", "197e18", "e18947"))  )
R> group
   group
1 12357e
2 12575e
3 197e18
4 e18947

এখন gsub()সহজতম প্রতিস্থাপনের ধরণটি ব্যবহার করুন: খালি স্ট্রিং:

R> group$groupNoE <- gsub("e", "", group$group)
R> group
   group groupNoE
1 12357e    12357
2 12575e    12575
3 197e18    19718
4 e18947    18947
R> 

3
এছাড়াও ...require(stringr);group$groupNoE <- str_replace(group$group, "e", "")
ডিকোয়া

26
ঠিক আছে, আমি স্নিকারে বলতে পারি যে "যারা বেস ফাংশন বুঝতে পারে না তারা তাদের প্রতিস্থাপনের জন্য ডومডড"। আপনার উত্স ফাইলে আন্ডারস্কোর সংখ্যা বাড়ানোর পাশাপাশি স্ট্রিংগার এখানে কী লাভ করে?
ডার্ক এডেলবুয়েটেল

8
" স্ট্রিংগার হ'ল সহজ মোড়কের একটি সেট যা আর এর স্ট্রিং ফাংশনগুলিকে আরও সুসংগত, সহজ এবং সহজেই ব্যবহার করতে সহজ করে তোলে " প্যাকেজের লেখকের কাছ থেকে। সুতরাং যদি আপনি যা বলেন সত্য (বেইজ ফাংশনগুলি মোড়ানোর জন্য অনেকগুলি আন্ডারস্কোর ...) এই প্যাকেজটির অস্তিত্বের কোনও কারণ নেই (অস্বীকৃতি: আমি মূলত বেস রেজেক্স ফাংশন ব্যবহার করি তবে আমি জানি যে তারা নতুন ব্যবহারকারীদের পক্ষে কঠিন হতে পারে ... )
ডিকোয়া

17
@ ডিকোয়া: str_replaceমোড়ানো sub, সুতরাং এটি কেবলমাত্র প্যাটার্নটির প্রথম ঘটনাটি প্রতিস্থাপন করবে। আপনি str_replace_allযেমন ব্যবহার করতে চান আপনি ব্যবহার করতে হবে gsub
জোশুয়া উলরিচ

24

স্ট্রিং প্রতিস্থাপনের 2 টি উপায় সংক্ষেপ:

group<-data.frame(group=c("12357e", "12575e", "197e18", "e18947"))

1) ব্যবহার করুন gsub

group$group.no.e <- gsub("e", "", group$group)

২) stringrপ্যাকেজটি ব্যবহার করুন

group$group.no.e <- str_replace_all(group$group, "e", "")

উভয়ই আকাঙ্ক্ষার আউটপুট উত্পাদন করবে:

   group group.no.e
1 12357e      12357
2 12575e      12575
3 197e18      19718
4 e18947      18947

3
সেই সময়ে স্ট্রিংারের জন্য সিনট্যাক্স শিখতে মন্তব্য সহ পুরো পৃষ্ঠাটি পড়তে হয়েছিল, আমার পছন্দের পদ্ধতি, কারণ এটি বেশিরভাগ মন্তব্যেই আলোচিত ছিল। এই সমাধানটি দ্রুত উভয় বিকল্প উপস্থাপন করে, এজন্যই আমি এটি অফার করেছি। আমার আশা ছিল অন্য ব্যবহারকারীদের ফিল্টার করতে সাহায্য করার মতো আমি যখন আর এ নতুন ছিলাম তখন আমি স্ট্রিংারের সন্ধানের আগে জিএসব দিয়ে লড়াই করেছি কারণ এটি একটি উচ্চ উত্তরের উত্তরে উল্লেখ করা হয়নি। আবার, উদ্দেশ্যটি upvotes সংগ্রহ করা নয় বরং নতুন আর ব্যবহারকারীদের সাহায্য করার চেষ্টা করা।
মেগাট্রন

যদি আপনি অন্যান্য উত্তর / মন্তব্যে তথ্য পেয়ে থাকেন যা আপনাকে দরকারী বলে মনে হয়েছে এবং কোনও উত্তরে রূপান্তর করতে চান তবে আপনি কমপক্ষে কিছু উত্তর সরবরাহ করতে পারতেন যেখানে আপনি উত্তরটি একটি কমিনিউটি উইকি থেকে সঞ্চারিত করার পরিবর্তে কোথা থেকে পেয়েছেন / তৈরি করেছেন? আপনার নিজের.
ডেভিড আরেনবুর্গ

ধন্যবাদ - পরের বারের জন্য মনে রাখবেন। এর আগে কখনও কোনও সম্প্রদায় উইকি তৈরি করেনি, তাই জানেন না এটি একটি বিকল্প ছিল।
মেগাট্রন

1
কলামের সমস্ত মান নির্দিষ্ট না করেই কোনও ডাটা ফ্রেমে ডেটা কলামে প্রয়োগ করা হলে বিকল্প 2 দুর্দান্ত কাজ করে। স্পষ্টতই বিকল্প 1 পুনরাবৃত্তি, তবে বিকল্প 2 খুব ভালভাবে কাজ করে, এবং যুক্ত কার্যকারিতাটির জন্য একটি ভোটের দাবিদার।
ফিল_টপ

6

আপনি যদি এর মধ্যে কিছু অক্ষর প্রতিস্থাপন করতে চান তবে আপনার স্ট্রিংয়ের ভেক্টর থেকে ডেটা ফ্রেম তৈরি করার দরকার নেই। নিয়মিত প্রকাশগুলি এর পক্ষে ভাল পছন্দ কারণ এটি ইতিমধ্যে @ অ্যান্ড্রি এবং @ ডার্ক এডেলবুয়েটেল উল্লেখ করেছেন।

মনোযোগ দিন, আপনি যদি বিন্দুর মতো বিশেষ অক্ষরগুলি প্রতিস্থাপন করতে চান তবে আপনার নীচের উদাহরণ হিসাবে প্রদর্শিত হিসাবে পুরো নিয়মিত এক্সপ্রেশন সিনট্যাক্স নিয়োগ করা উচিত:

ctr_names <- c("Czech.Republic","New.Zealand","Great.Britain")
gsub("[.]", " ", ctr_names)

এই উত্পাদন করবে

[1] "Czech Republic" "New Zealand"    "Great Britain" 

আপনি কেবল এগুলি থেকে পালাতে পারেন, তবে আপনাকে পালানোর চরিত্রটিও পালাতে হবে কারণ এটি উদ্ধৃতিতে রয়েছে:gsub("\\.", " ", ctr_names)
কামিল এস জারন

4

স্ট্রিং প্যাকেজটি ব্যবহার করুন :

require(stringi)

group<-data.frame(c("12357e", "12575e", "197e18", "e18947"))
stri_replace_all(group[,1], "", fixed="e")
[1] "12357" "12575" "19718" "18947"

0
      library(stringi)

            group <- c('12357e', '12575e', '12575e', ' 197e18',  'e18947')

            pattern <- "e"  
            replacement <-  ""  
            group <- str_replace(group, pattern, replacement)      
            group    

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