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
gsubgsubsubstitui 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.
stringrabordagem: str_replace_allestr_trimstringrfornece 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(), "")
stringrtambém possui uma str_trimfunçã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
stringiabordagem: stri_replace_all_charclassestri_trimstringié 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.
stringitambé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_charclassdo stringipacote.
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringipacote já está no CRAN, divirta-se! :)
stringipor 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 stringrtidyverse 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_squishnã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 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)
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 "), " ", "")