navisworks español r whitespace trim removing-whitespace built-in

español - ¿Cómo recortar los espacios en blanco iniciales y finales?



manual de navisworks 2018 en español pdf (13)

Tengo algunos problemas con los espacios en blanco iniciales y finales en un data.frame. Por ejemplo, me gusta echar un vistazo a una row específica en un data.frame basado en una determinada condición:

> myDummy[myDummy$country == c("Austria"),c(1,2,3:7,19)] [1] codeHelper country dummyLI dummyLMI dummyUMI [6] dummyHInonOECD dummyHIOECD dummyOECD <0 rows> (or 0-length row.names)

Me preguntaba por qué no obtuve la salida esperada ya que el país Austria obviamente existía en mi data.frame . Después de revisar el historial de mi código e intentar averiguar qué salió mal, lo intenté:

> myDummy[myDummy$country == c("Austria "),c(1,2,3:7,19)] codeHelper country dummyLI dummyLMI dummyUMI dummyHInonOECD dummyHIOECD 18 AUT Austria 0 0 0 0 1 dummyOECD 18 1

Todo lo que he cambiado en el comando es un espacio en blanco adicional después de Austria.

Otros problemas molestos obviamente surgen. Por ejemplo, cuando me gusta combinar dos marcos basados ​​en la columna de país. Un data.frame usa "Austria " mientras que el otro frame tiene "Austria" . El emparejamiento no funciona.

  1. ¿Hay una buena manera de "mostrar" los espacios en blanco en mi pantalla para que yo esté al tanto del problema?
  2. ¿Y puedo eliminar los espacios en blanco iniciales y finales en R?

Hasta ahora solía escribir un simple script de Perl que elimina el espacio en blanco, pero sería bueno si pudiera hacerlo dentro de R.



El mejor método es trimws ()

El siguiente código aplicará esta función a todo el marco de datos

mydataframe <- data.frame (lapply (mydataframe, trimws), cadenasAsFactors = FALSE)


Intenté recortar (). Funciona bien con espacios en blanco, así como el ''/ n''. x = ''/ n Harden, J. / n''

recortar (x)


Otra opción es usar la función stringi paquete stringi , que de manera predeterminada elimina los espacios en blanco stringi y finales:

> x <- c(" leading space","trailing space ") > stri_trim(x) [1] "leading space" "trailing space"

Para eliminar solo los espacios en blanco stri_trim_left , use stri_trim_left . Para eliminar solo los espacios en blanco al final, use stri_trim_right . Cuando desee eliminar otros caracteres iniciales o finales, debe especificar eso con el pattern = .

Vea también ?stri_trim para más información.


Otro problema relacionado ocurre si tiene múltiples espacios entre las entradas:

> a <- " a string with lots of starting, inter mediate and trailing whitespace "

Luego, puede dividir fácilmente esta cadena en tokens "reales" usando una expresión regular para el argumento de split :

> strsplit(a, split=" +") [[1]] [1] "" "a" "string" "with" "lots" [6] "of" "starting," "inter" "mediate" "and" [11] "trailing" "whitespace"

Tenga en cuenta que si hay una coincidencia al principio de una cadena (no vacía), el primer elemento de la salida es "" "'', pero si hay una coincidencia al final de la cadena, la salida es la misma que con el partido eliminado.


Para manipular el espacio en blanco, use str_trim () en el paquete stringr. El paquete tiene manual con fecha del 15 de febrero de 2013 y está en CRAN. La función también puede manejar vectores de cadena.

install.packages("stringr", dependencies=TRUE) require(stringr) example(str_trim) d4$clean2<-str_trim(d4$V2)

(El crédito es para el comentarista: R. Cotton)


Preferiría agregar la respuesta como comentario al usuario56 pero aún así no puedo escribirla como una respuesta independiente. La eliminación de los espacios en blanco iniciales y finales se puede lograr también a través de la función trim () del paquete gdata:

require(gdata) example(trim)

Ejemplo de uso:

> trim(" Remove leading and trailing blanks ") [1] "Remove leading and trailing blanks"


Probablemente, la mejor manera es manejar los espacios en blanco finales al leer su archivo de datos. Si usa read.csv o read.table puede establecer el parámetro strip.white=TRUE .

Si desea limpiar cadenas después, puede usar una de estas funciones:

# returns string w/o leading whitespace trim.leading <- function (x) sub("^//s+", "", x) # returns string w/o trailing whitespace trim.trailing <- function (x) sub("//s+$", "", x) # returns string w/o leading or trailing whitespace trim <- function (x) gsub("^//s+|//s+$", "", x)

Para usar una de estas funciones en myDummy$country :

myDummy$country <- trim(myDummy$country)

Para ''mostrar'' el espacio en blanco se puede utilizar:

paste(myDummy$country)

que le mostrará las cadenas entre comillas (") haciendo que los espacios en blanco sean más fáciles de detectar.


Una función simple para eliminar los espacios en blanco iniciales y finales:

trim <- function( x ) { gsub("(^[[:space:]]+|[[:space:]]+$)", "", x) }

Uso:

> text = " foo bar baz 3 " > trim(text) [1] "foo bar baz 3"


Usa grep o grepl para encontrar observaciones con espacios en blanco y sub para deshacerte de ellos.

names<-c("Ganga Din/t","Shyam Lal","Bulbul ") grep("[[:space:]]+$",names) [1] 1 3 grepl("[[:space:]]+$",names) [1] TRUE FALSE TRUE sub("[[:space:]]+$","",names) [1] "Ganga Din" "Shyam Lal" "Bulbul"


ad1) Para ver espacios en blanco puede llamar directamente a print.data.frame con argumentos modificados:

print(head(iris), quote=TRUE) # Sepal.Length Sepal.Width Petal.Length Petal.Width Species # 1 "5.1" "3.5" "1.4" "0.2" "setosa" # 2 "4.9" "3.0" "1.4" "0.2" "setosa" # 3 "4.7" "3.2" "1.3" "0.2" "setosa" # 4 "4.6" "3.1" "1.5" "0.2" "setosa" # 5 "5.0" "3.6" "1.4" "0.2" "setosa" # 6 "5.4" "3.9" "1.7" "0.4" "setosa"

Vea también ?print.data.frame para otras opciones.


trim.strings () una función trim.strings () para recortar espacios en blanco trim.strings () y / o finales como:

# Arguments: x - character vector # side - side(s) on which to remove whitespace # default : "both" # possible values: c("both", "leading", "trailing") trim.strings <- function(x, side = "both") { if (is.na(match(side, c("both", "leading", "trailing")))) { side <- "both" } if (side == "leading") { sub("^//s+", "", x) } else { if (side == "trailing") { sub("//s+$", "", x) } else gsub("^//s+|//s+$", "", x) } }

Por ilustracion,

a <- c(" ABC123 456 ", " ABC123DEF ") # returns string without leading and trailing whitespace trim.strings(a) # [1] "ABC123 456" "ABC123DEF" # returns string without leading whitespace trim.strings(a, side = "leading") # [1] "ABC123 456 " "ABC123DEF " # returns string without trailing whitespace trim.strings(a, side = "trailing") # [1] " ABC123 456" " ABC123DEF"


myDummy[myDummy$country == "Austria "] <- "Austria"

Después de esto, tendrás que forzar a R a no reconocer "Austria" como un nivel. Supongamos que también tiene "USA" y "España" como niveles:

myDummy$country = factor(myDummy$country, levels=c("Austria", "USA", "Spain"))

Un poco menos intimidante que la respuesta más votada, pero aún debería funcionar.