ดังนั้นจะกลายเป็น" xx yy 11 22 33 "
"xxyy112233"
ฉันจะบรรลุสิ่งนี้ได้อย่างไร
ดังนั้นจะกลายเป็น" xx yy 11 22 33 "
"xxyy112233"
ฉันจะบรรลุสิ่งนี้ได้อย่างไร
คำตอบ:
โดยทั่วไปเราต้องการคำตอบที่เป็นเวกเตอร์ดังนั้นนี่คือตัวอย่างการทดสอบที่ดีกว่า:
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
ดังที่ DWin ตั้งข้อสังเกตในกรณี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:]"
เป็นกลุ่มนิพจน์ทั่วไป R-specific ที่ตรงกับอักขระช่องว่างทั้งหมด \s
เป็นนิพจน์ทั่วไปที่ไม่ขึ้นกับภาษาซึ่งทำสิ่งเดียวกัน
stringr
วิธีการ: str_replace_all
และstr_trim
stringr
นำเสนอ wrappers ที่มนุษย์สามารถอ่านได้มากขึ้นรอบฟังก์ชัน R พื้นฐาน (แม้ว่า ณ เดือนธันวาคม 2014 รุ่นพัฒนาจะมีสาขาที่สร้างขึ้นด้านบน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
ถูกสร้างขึ้นบนไลบรารี ICU ที่ไม่ขึ้นกับแพลตฟอร์มและมีชุดฟังก์ชันการจัดการสตริงที่กว้างขวาง การเทียบเท่าด้านบนคือ:
library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")
นี่"\\p{WHITE_SPACE}"
เป็นไวยากรณ์สำรองสำหรับชุดของ Unicode จุดรหัสถือว่าเป็นช่องว่างคิดเป็น"[[: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
"[[:space:]]"
และ"\\s"
?
ฉันเพิ่งเรียนรู้เกี่ยวกับแพคเกจ "stringr" เพื่อลบ white space ออกจากจุดเริ่มต้นและจุดสิ้นสุดของสตริงด้วย str_trim (, side = "both") แต่มันก็มีฟังก์ชั่นการแทนที่ด้วย:
a <- " xx yy 11 22 33 "
str_replace_all(string=a, pattern=" ", repl="")
[1] "xxyy112233"
โปรดทราบว่าการเขียนข้อความข้างต้นจะลบเฉพาะที่ว่างออก หากคุณต้องการที่จะลบแท็บหรือการใช้สายใหม่stri_replace_all_charclass
จากstringi
แพคเกจ
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringi
แพคเกจอยู่ใน CRAN แล้วสนุกได้เลย! :)
stringi
ไปสองสามเดือนตอนนี้และได้เห็น / เรียนรู้ว่ามันมีประสิทธิภาพและมีประสิทธิภาพเพียงใด พวกคุณทำได้ดีมากด้วย
ใช้[[:blank:]]
เพื่อจับคู่อักขระ white_space แนวนอนทุกชนิด
gsub("[[:blank:]]", "", " xx yy 11 22 33 ")
# [1] "xxyy112233"
x = "xx yy 11 22 33"
gsub(" ", "", x)
> [1] "xxyy112233"
ฟังก์ชั่นstr_squish()
จากแพ็คเกจstringr
ของ tidyverse นั้นมหัศจรรย์!
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
str_squish
ไม่ได้ลบช่องว่างทั้งหมด มันจดจ้องและทดแทนหลายช่องว่างสำหรับหนึ่ง
วิธีนี้คุณสามารถลบช่องว่างทั้งหมดออกจากตัวแปรอักขระทั้งหมดในกรอบข้อมูลของคุณ หากคุณต้องการที่จะเลือกเพียงบางส่วนของตัวแปรการใช้งานหรือ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)
จากห้องสมุด stringr คุณสามารถลอง:
ลบการเติมช่องว่าง
ห้องสมุด (stringr)
2. 1.
| |
V V
str_replace_all(str_trim(" xx yy 11 22 33 "), " ", "")