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
gsubgsubremplace toutes les instances d'une chaîne ( fixed = TRUE) ou d'une expression régulière ( fixed = FALSEpar 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 = TRUEn'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. \sest une expression régulière indépendante du langage qui fait la même chose.
stringrapproche: str_replace_alletstr_trimstringrfournit 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(), "")
stringra également une str_trimfonction 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
stringiapproche: stri_replace_all_charclassetstri_trimstringiest 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.
stringia é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_charclassde ligne du stringipackage.
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringile paquet est sur CRAN maintenant, profitez-en! :)
stringipendant 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 stringrde 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_squishne 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 mutateou 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 "), " ", "")