Jadi " xx yy 11 22 33 "
akan menjadi "xxyy112233"
. Bagaimana saya bisa mencapai ini?
Jadi " xx yy 11 22 33 "
akan menjadi "xxyy112233"
. Bagaimana saya bisa mencapai ini?
Jawaban:
Secara umum, kami menginginkan solusi yang di-vectorised, jadi inilah contoh pengujian yang lebih baik:
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
mengganti semua instance string ( fixed = TRUE
) atau ekspresi reguler ( fixed = FALSE
, default) dengan string lain. Untuk menghapus semua spasi, gunakan:
gsub(" ", "", x, fixed = TRUE)
## [1] "xy" "←→"
## [3] "\t\n\r\v\fx\t\n\r\v\fy\t\n\r\v\f" NA
Seperti yang dicatat DWin, dalam hal fixed = TRUE
ini tidak perlu tetapi memberikan kinerja yang sedikit lebih baik karena pencocokan string tetap lebih cepat daripada pencocokan ekspresi reguler.
Jika Anda ingin menghapus semua jenis spasi, gunakan:
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:]"
adalah grup ekspresi reguler spesifik R yang cocok dengan semua karakter ruang. \s
adalah ekspresi reguler independen-bahasa yang melakukan hal yang sama.
stringr
pendekatan: str_replace_all
danstr_trim
stringr
menyediakan lebih banyak pembungkus yang dapat dibaca manusia di sekitar fungsi dasar R (meskipun pada Desember 2014, versi pengembangan memiliki cabang yang dibangun di atas stringi
, yang disebutkan di bawah). Setara dengan perintah di atas, menggunakan [ str_replace_all][3]
, adalah:
library(stringr)
str_replace_all(x, fixed(" "), "")
str_replace_all(x, space(), "")
stringr
juga memiliki str_trim
fungsi yang hanya menghilangkan spasi putih depan dan belakang.
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
pendekatan: stri_replace_all_charclass
danstri_trim
stringi
dibangun di atas pustaka ICU platform-independen , dan memiliki serangkaian fungsi manipulasi string. The setara di atas adalah:
library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")
Berikut "\\p{WHITE_SPACE}"
ini adalah sintaks alternatif untuk set poin kode Unicode yang dianggap sebagai spasi putih, setara dengan "[[:space:]]"
, "\\s"
dan space()
. Untuk penggantian ekspresi reguler yang lebih kompleks, ada juga stri_replace_all_regex
.
stringi
juga memiliki fungsi trim .
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:]]"
dan "\\s"
?
Saya baru saja belajar tentang paket "stringr" untuk menghilangkan spasi putih dari awal dan akhir string dengan str_trim (, side = "both") tetapi juga memiliki fungsi penggantian sehingga:
a <- " xx yy 11 22 33 "
str_replace_all(string=a, pattern=" ", repl="")
[1] "xxyy112233"
Harap dicatat bahwa soulions yang ditulis di atas hanya menghilangkan ruang. Jika Anda ingin juga menghapus tab atau penggunaan baris baru stri_replace_all_charclass
dari stringi
paket.
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringi
paket ada di CRAN sekarang, selamat menikmati! :)
stringi
selama beberapa bulan sekarang dan melihat / belajar betapa kuat dan efisiennya, itu telah menjadi paket masuk saya untuk operasi string. Kalian melakukan pekerjaan yang luar biasa dengannya.
Gunakan [[:blank:]]
untuk mencocokkan segala jenis karakter white_space horisontal.
gsub("[[:blank:]]", "", " xx yy 11 22 33 ")
# [1] "xxyy112233"
Fungsi str_squish()
dari paket stringr
Tidyverse melakukan keajaiban!
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
tidak menghapus semua spasi. Itu hanya memotong dan mengganti beberapa ruang untuk satu.
Dengan cara ini Anda bisa menghapus semua spasi dari semua variabel karakter dalam bingkai data Anda. Jika Anda lebih suka memilih hanya beberapa variabel, gunakan mutate
atau 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)
Dari perpustakaan stringr Anda dapat mencoba ini:
Hapus isi kosong
perpustakaan (stringr)
2. 1.
| |
V V
str_replace_all(str_trim(" xx yy 11 22 33 "), " ", "")