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
gsubgsubmengganti 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 = TRUEini 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. \sadalah ekspresi reguler independen-bahasa yang melakukan hal yang sama.
stringrpendekatan: str_replace_alldanstr_trimstringrmenyediakan 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(), "")
stringrjuga memiliki str_trimfungsi 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
stringipendekatan: stri_replace_all_charclassdanstri_trimstringidibangun 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.
stringijuga 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_charclassdari stringipaket.
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringipaket ada di CRAN sekarang, selamat menikmati! :)
stringiselama 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 stringrTidyverse 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_squishtidak 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 mutateatau 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 "), " ", "")