Réponses:
En général, nous voulons une solution vectorisée, voici donc un meilleur exemple de test:
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
remplace toutes les instances d'une chaîne ( fixed = TRUE
) ou d'une expression régulière ( fixed = FALSE
par défaut) par une autre chaîne. Pour supprimer tous les espaces, utilisez:
gsub(" ", "", x, fixed = TRUE)
## [1] "xy" "←→"
## [3] "\t\n\r\v\fx\t\n\r\v\fy\t\n\r\v\f" NA
Comme DWin l'a noté, dans ce cas, ce fixed = TRUE
n'est pas nécessaire mais offre des performances légèrement meilleures car la correspondance avec une chaîne fixe est plus rapide que la correspondance avec une expression régulière.
Si vous souhaitez supprimer tous les types d'espaces, utilisez:
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:]"
est un groupe d'expressions régulières spécifique à R correspondant à tous les caractères d'espacement. \s
est une expression régulière indépendante du langage qui fait la même chose.
stringr
approche: str_replace_all
etstr_trim
stringr
fournit des wrappers plus lisibles par l'homme autour des fonctions de base R (bien qu'à partir de décembre 2014, la version de développement ait une branche construite au-dessus stringi
, mentionnée ci-dessous). Les équivalents des commandes ci-dessus, en utilisant [ str_replace_all][3]
, sont:
library(stringr)
str_replace_all(x, fixed(" "), "")
str_replace_all(x, space(), "")
stringr
a également une str_trim
fonction qui supprime uniquement les espaces de début et de fin.
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
approche: stri_replace_all_charclass
etstri_trim
stringi
est construit sur la bibliothèque ICU indépendante de la plate-forme et dispose d'un ensemble complet de fonctions de manipulation de chaînes. Les équivalents de ce qui précède sont:
library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")
Voici "\\p{WHITE_SPACE}"
une syntaxe alternative pour l'ensemble des points de code Unicode considérés comme des espaces, équivalent à "[[:space:]]"
, "\\s"
et space()
. Pour les remplacements d'expressions régulières plus complexes, il existe également stri_replace_all_regex
.
stringi
a également des fonctions de garniture .
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:]]"
et "\\s"
?
Je viens d'apprendre le package "stringr" pour supprimer les espaces blancs du début et de la fin d'une chaîne avec str_trim (, side = "both") mais il a également une fonction de remplacement pour que:
a <- " xx yy 11 22 33 "
str_replace_all(string=a, pattern=" ", repl="")
[1] "xxyy112233"
Veuillez noter que les soultions écrites ci-dessus ne suppriment que l'espace. Si vous souhaitez également supprimer un onglet ou une nouvelle utilisation stri_replace_all_charclass
de ligne du stringi
package.
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringi
le paquet est sur CRAN maintenant, profitez-en! :)
stringi
pendant quelques mois maintenant et vu / appris à quel point il est puissant et efficace, il est devenu mon package incontournable pour les opérations de chaîne. Vous avez fait un travail formidable avec.
Utilisation [[:blank:]]
pour faire correspondre tout type de caractères d'espace blanc horizontal.
gsub("[[:blank:]]", "", " xx yy 11 22 33 ")
# [1] "xxyy112233"
La fonction str_squish()
de package stringr
de tidyverse fait la magie!
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
ne supprime pas tous les espaces. Il coupe simplement et remplace plusieurs espaces par un seul.
De cette façon, vous pouvez supprimer tous les espaces de toutes les variables de caractères de votre bloc de données. Si vous préférez ne choisir que certaines des variables, utilisez mutate
ou 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)
À partir de la bibliothèque stringr, vous pouvez essayer ceci:
Supprimer le blanc de remplissage
bibliothèque (stringr)
2. 1.
| |
V V
str_replace_all(str_trim(" xx yy 11 22 33 "), " ", "")