Respostas:
Em geral, queremos uma solução vetorizada, então aqui está um exemplo de teste melhor:
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
substitui todas as instâncias de uma string ( fixed = TRUE
) ou expressão regular ( fixed = FALSE
, o padrão) por outra string. Para remover todos os espaços, use:
gsub(" ", "", x, fixed = TRUE)
## [1] "xy" "←→"
## [3] "\t\n\r\v\fx\t\n\r\v\fy\t\n\r\v\f" NA
Como DWin observou, neste caso fixed = TRUE
não é necessário, mas fornece um desempenho um pouco melhor, pois a correspondência de uma sequência fixa é mais rápida que a de uma expressão regular.
Se você deseja remover todos os tipos de espaço em branco, use:
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:]"
é um grupo de expressão regular específico de R que corresponde a todos os caracteres de espaço. \s
é uma expressão regular independente da linguagem que faz a mesma coisa.
stringr
abordagem: str_replace_all
estr_trim
stringr
fornece mais wrappers legíveis por humanos em torno das funções R básicas (embora em dezembro de 2014, a versão de desenvolvimento tenha uma ramificação construída em cima stringi
, mencionada abaixo). Os equivalentes dos comandos acima, usando [ str_replace_all][3]
, são:
library(stringr)
str_replace_all(x, fixed(" "), "")
str_replace_all(x, space(), "")
stringr
também possui uma str_trim
função que remove apenas os espaços em branco iniciais e finais.
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
abordagem: stri_replace_all_charclass
estri_trim
stringi
é construído sobre a biblioteca ICU independente da plataforma e possui um amplo conjunto de funções de manipulação de strings. o equivalentes dos itens acima são:
library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")
Aqui "\\p{WHITE_SPACE}"
está uma sintaxe alternativa para o conjunto de pontos de código Unicode considerados como espaço em branco, equivalente a "[[:space:]]"
,"\\s"
e space()
. Para substituições de expressões regulares mais complexas, também existe stri_replace_all_regex
.
stringi
também possui funções de apara .
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:]]"
e "\\s"
?
Acabei de aprender sobre o pacote "stringr" para remover o espaço em branco do início e do fim de uma string com str_trim (, side = "both"), mas também possui uma função de substituição para que:
a <- " xx yy 11 22 33 "
str_replace_all(string=a, pattern=" ", repl="")
[1] "xxyy112233"
Observe que as almas escritas acima removem apenas o espaço. Se você quiser também para remover guia ou nova linha uso stri_replace_all_charclass
do stringi
pacote.
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringi
pacote já está no CRAN, divirta-se! :)
stringi
por alguns meses e ver / aprender o quão poderoso e eficiente é, tornou-se meu pacote obrigatório para operações de string. Vocês fizeram um trabalho incrível com isso.
Use [[:blank:]]
para corresponder a qualquer tipo de caracteres de espaço em branco horizontal.
gsub("[[:blank:]]", "", " xx yy 11 22 33 ")
# [1] "xxyy112233"
A função str_squish()
do pacote stringr
tidyverse faz a mágica!
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
não remove todos os espaços. Apenas apara e substitui vários espaços por um.
Dessa forma, você pode remover todos os espaços de todas as variáveis de caracteres no seu quadro de dados. Se você preferir escolher apenas algumas das variáveis, use 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)
Na biblioteca stringr, você pode tentar o seguinte:
Remover preenchimento em branco
biblioteca (stringr)
2. 1.
| |
V V
str_replace_all(str_trim(" xx yy 11 22 33 "), " ", "")