স্ট্রিং থেকে সমস্ত সাদা স্থান কীভাবে সরিয়ে ফেলবেন?


152

তাই " xx yy 11 22 33 "হয়ে যাবে "xxyy112233"। আমি কীভাবে এটি অর্জন করতে পারি?

উত্তর:


258

সাধারণভাবে, আমরা এমন সমাধান চাই যা ভেক্টরাইজড, তাই এখানে আরও ভাল পরীক্ষার উদাহরণ দেওয়া হল:

whitespace <- " \t\n\r\v\f" # space, tab, newline, 
                            # carriage return, vertical tab, form feed
x <- c(
  " x y ",           # spaces before, after and in between
  " \u2190 \u2192 ", # contains unicode chars
  paste0(            # varied whitespace     
    whitespace, 
    "x", 
    whitespace, 
    "y", 
    whitespace, 
    collapse = ""
  ),   
  NA                 # missing
)
## [1] " x y "                           
## [2] " ← → "                           
## [3] " \t\n\r\v\fx \t\n\r\v\fy \t\n\r\v\f"
## [4] NA

বেস আর পদ্ধতির: gsub

gsubস্ট্রিং ( fixed = TRUE) বা নিয়মিত এক্সপ্রেশন ( fixed = FALSE, ডিফল্ট) এর সমস্ত দৃষ্টান্ত অন্য স্ট্রিংয়ের সাথে প্রতিস্থাপন করে । সমস্ত স্থান সরাতে, ব্যবহার করুন:

gsub(" ", "", x, fixed = TRUE)
## [1] "xy"                            "←→"             
## [3] "\t\n\r\v\fx\t\n\r\v\fy\t\n\r\v\f" NA 

ডিউইন যেমন উল্লেখ করেছেন, এক্ষেত্রে fixed = TRUEপ্রয়োজনীয় নয় তবে কিছুটা ভাল পারফরম্যান্স সরবরাহ করে কারণ একটি নির্দিষ্ট স্ট্রিংয়ের সাথে ম্যাচ করা নিয়মিত অভিব্যক্তির সাথে মিলের চেয়ে দ্রুত।

আপনি যদি সমস্ত ধরণের সাদা জায়গা সরাতে চান তবে ব্যবহার করুন:

gsub("[[:space:]]", "", x) # note the double square brackets
## [1] "xy" "←→" "xy" NA 

gsub("\\s", "", x)         # same; note the double backslash

library(regex)
gsub(space(), "", x)       # same

"[:space:]"সমস্ত স্থানের অক্ষরের সাথে মিলে যাওয়া একটি আর-নির্দিষ্ট নিয়মিত এক্সপ্রেশন গ্রুপ। \sভাষা-স্বাধীন নিয়মিত-প্রকাশ যা একই কাজ করে does


stringrদৃষ্টীকোণ: str_replace_allএবংstr_trim

stringrবেস আর ফাংশনগুলির আশেপাশে আরও বেশি মানব-পঠনযোগ্য মোড়ক সরবরাহ করে (যদিও ডিসেম্বর ২০১৪ হিসাবে, বিকাশের সংস্করণটির উপরে একটি শাখা রয়েছে যা stringiনীচে উল্লেখ করা হয়েছে)। উপরে কম্যান্ডের সমতুল, [ব্যবহার str_replace_all][3], আছেন:

library(stringr)
str_replace_all(x, fixed(" "), "")
str_replace_all(x, space(), "")

stringrএছাড়াও একটি str_trimফাংশন রয়েছে যা কেবলমাত্র শীর্ষস্থানীয় এবং অনুসরণকারী শ্বেতস্থানকে সরিয়ে দেয়।

str_trim(x) 
## [1] "x y"          "← →"          "x \t\n\r\v\fy" NA    
str_trim(x, "left")    
## [1] "x y "                   "← → "    
## [3] "x \t\n\r\v\fy \t\n\r\v\f" NA     
str_trim(x, "right")    
## [1] " x y"                   " ← →"    
## [3] " \t\n\r\v\fx \t\n\r\v\fy" NA      

stringiদৃষ্টীকোণ: stri_replace_all_charclassএবংstri_trim

stringiপ্ল্যাটফর্ম-স্বতন্ত্র আইসিইউ লাইব্রেরির উপর নির্মিত এবং স্ট্রিং ম্যানিপুলেশন ফাংশনগুলির একটি বিস্তৃত সেট রয়েছে। সমতুল উপরোক্ত আছেন:

library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")

এখানে "\\p{WHITE_SPACE}"ইউনিকোড কোড হোয়াইটস্পেস, এর সমতুল্য হিসেবে বিবেচনা করা পয়েন্ট সেট করার জন্য একটি বিকল্প বাক্য গঠন হয় "[[:space:]]", "\\s"এবং space()। আরও জটিল নিয়মিত অভিব্যক্তি প্রতিস্থাপনের জন্য, রয়েছে stri_replace_all_regex

stringiএছাড়াও ছাঁটা ফাংশন আছে

stri_trim(x)
stri_trim_both(x)    # same
stri_trim(x, "left")
stri_trim_left(x)    # same
stri_trim(x, "right")  
stri_trim_right(x)   # same

2
@Aniko। আপনি স্থির = সত্য ব্যবহার করার কোনও কারণ আছে কি?
আইআরটিএফএম

2
@ ডিউইন মনে হয় এটি আর দ্রুত হয় যদি আর জানে যে এটি নিয়মিত প্রকাশের স্টাফ গ্রহণ করতে হবে না। এই ক্ষেত্রে এটি আসলে কোনও পার্থক্য করে না, আমি কেবল এটি করার অভ্যাসে আছি।
আনিকো

তার মাঝে একটি পার্থক্য আছে কি "[[:space:]]"এবং "\\s"?
সাচ্চা এপসক্যাম্প

5
আপনি যদি flyordie.sin.khk.be/2011/05/04/day-35- পুনর্নির্মাণ-characters পরীক্ষা করে থাকেন বা কেবল টাইপ? regex টাইপ করেন তবে আপনি দেখতে পাচ্ছেন [: স্পেস:] "স্পেস অক্ষর: ট্যাব, নিউলাইন , উল্লম্ব ট্যাব, ফর্ম ফিড, ক্যারেজ রিটার্ন এবং স্থান " এটি একা জায়গার চেয়ে অনেক বেশি
স্যার কসিলিম

1
@ আনিকো আশা করি আপনি বড় সম্পাদনার বিষয়ে আপত্তি করবেন না। যেহেতু এই প্রশ্নটি অত্যন্ত জনপ্রিয়, উত্তরটি আরও পুঙ্খানুপুঙ্খভাবে হওয়া দরকার বলে মনে হয়েছিল।
রিচি কটন

18

আমি str_trim (, পাশ = "উভয়") দিয়ে একটি স্ট্রিংয়ের শুরু এবং শেষ থেকে সাদা স্থান সরাতে "স্ট্রিংগার" প্যাকেজটির বিষয়ে জানতে পেরেছি তবে এর একটি প্রতিস্থাপন ফাংশনও রয়েছে যাতে:

a <- " xx yy 11 22 33 " 
str_replace_all(string=a, pattern=" ", repl="")

[1] "xxyy112233"

3
স্ট্রিংগার প্যাকেজ প্রতিটি এনকোডিংয়ের সাথে ভাল কাজ করে না। স্ট্রিংই প্যাকেজটি আরও ভাল সমাধান, আরও তথ্যের জন্য পরীক্ষা করুন github.com/Rexamine/stringi
বারটেকটার্টানাস

8

দয়া করে নোট করুন যে উপরে লেখা আত্মাগুলি কেবল স্থান সরিয়ে দেয়। আপনি যদি প্যাকেজ stri_replace_all_charclassথেকে ট্যাব বা নতুন লাইন ব্যবহার সরাতে চান তবে stringi

library(stringi)
stri_replace_all_charclass("   ala \t  ma \n kota  ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"

4
stringiপ্যাকেজ এখন CRAN এ আছে, উপভোগ করুন! :)
বারটেকটার্টানাস

1
উপরের এই কমান্ডটি ভুল। সঠিক উপায় হ'ল__পরিচালিত_ সমস্ত_চর্চাক্লাস ("আলা \ t মা \ n কোটা", "\\ পি {WHITE_SPACE}", ""))
লুকাস ফোর্টিনি

5
stringiএখন কয়েক মাস ব্যবহার করার পরে এবং এটি কতটা শক্তিশালী এবং দক্ষ তা দেখে / শিখেছে, এটি স্ট্রিং ক্রিয়াকলাপগুলির জন্য আমার গ-টু প্যাকেজে পরিণত হয়েছে। আপনি ছেলেরা এটি সঙ্গে একটি দুর্দান্ত কাজ করেছেন।
ধনী স্ক্রিভেন

7

[[:blank:]]যে কোনও ধরণের অনুভূমিক সাদা_স্পেসের অক্ষরগুলির সাথে মেলে ব্যবহার করুন ।

gsub("[[:blank:]]", "", " xx yy 11 22  33 ")
# [1] "xxyy112233"


4

পরিশ্রমের str_squish()প্যাকেজ থেকে ফাংশন stringrযাদু করে!

library(dplyr)
library(stringr)

df <- data.frame(a = c("  aZe  aze s", "wxc  s     aze   "), 
                 b = c("  12    12 ", "34e e4  "), 
                 stringsAsFactors = FALSE)
df <- df %>%
  rowwise() %>%
  mutate_all(funs(str_squish(.))) %>%
  ungroup()
df

# A tibble: 2 x 2
  a         b     
  <chr>     <chr> 
1 aZe aze s 12 12 
2 wxc s aze 34e e4

4
দয়া করে কোড লিঙ্ক করবেন না। আপনার উত্তরের পাঠ্য সংস্থায় এটি যুক্ত করুন এবং আপনার উত্তরটি আরও দীর্ঘমেয়াদী মান দেওয়ার জন্য এটি এখানে ব্যাখ্যা করুন।
আর বালাসুব্রাহ্মণিয়ামে

এই নির্দেশিকাটি আমাকে স্মরণ করিয়ে দেওয়ার জন্য @ আরবালাসুব্রাহ্মণ্যকে ধন্যবাদ ভবিষ্যতে আমি এটি অনুসরণ করব।
দামিয়ানোডোনি

আমি দেখতে পাচ্ছি না কীভাবে এটি প্রশ্নের উত্তর দেয়। str_squishসমস্ত স্থান সরিয়ে দেয় না এটি কেবল একের জন্য একাধিক স্পেস ছাঁটাই করে প্রতিস্থাপন করে।
নেটলেট

0

এইভাবে আপনি আপনার ডেটা ফ্রেমের সমস্ত অক্ষর ভেরিয়েবল থেকে সমস্ত স্পেস সরিয়ে ফেলতে পারেন। আপনি যদি কিছু ভেরিয়েবল বেছে নিতে পছন্দ করেন তবে ব্যবহার করুন mutateবা mutate_at

library(dplyr)
library(stringr)

remove_all_ws<- function(string){
    return(gsub(" ", "", str_squish(string)))
}

df<-df %>%  mutate_if(is.character, remove_all_ws)

-1

স্ট্রিংয়ের লাইব্রেরি থেকে আপনি এটি ব্যবহার করে দেখতে পারেন:

  1. একটানা ফিল শূন্যস্থান সরিয়ে ফেলুন
  2. ভরাট ফাঁকা সরান

    লাইব্রেরী (stringr)

                2.         1.
                |          |
                V          V
    
        str_replace_all(str_trim(" xx yy 11 22  33 "), " ", "")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.