Cadenas de texto Juan José de Haro Contents 1 Abreviar palabras: abbreviate() 3 2 Contar caracteres: nchar() 3 3 Minúsculas y mayúsculas 4 3.1 tolower() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2 toupper() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 Establecer, comprobar o forzar variables a texto 5 4.1 character() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.2 is.character() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.3 as.character() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 Unir y separar texto 7 5.1 paste() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5.2 strsplit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 6 Buscar y reemplazar texto 8 6.1 substr() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 6.2 sub() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 6.3 gsub() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 7 Buscar 9 7.1 grep() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 7.2 grepl() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 7.3 regexpr() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 7.4 gregexpr() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1 Este documento describe algunas funciones útiles para la manipulación de las cadenas de texto en R. Está basado en Handling and Processing Strings in R. 2 1 Abreviar palabras: abbreviate() En una lista de nombres los abrevia evitando las repeticiones. # Carga la lista de provincias de Internet provincias <- read.table("http://pastebin.com/raw.php?i=WAuJFUVU", sep="\t", stringsAsFactors=F) # Abrevia los nombres de las provincias abbreviate(provincias$V1) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## 2 a coruna "acrn" avila "avil" cadiz "cadz" cuenca "cunc" huesca "husc" lugo "lugo" ourense "orns" sevilla "svll" valladolid "vlld" alava "alav" badajoz "bdjz" cantabria "cntb" girona "girn" jaen "jaen" madrid "mdrd" palencia "plnc" soria "sori" vizcaya "vzcy" albacete alicante almeria "albc" "alcn" "almr" baleares barcelona burgos "blrs" "brcl" "brgs" castellon ceuta ciudad real "cstl" "ceut" "cddr" granada guadalajara guipuzcoa "grnd" "gdlj" "gpzc" la rioja las palmas leon "lrij" "lspl" "leon" malaga melilla murcia "malg" "mlll" "murc" pontevedra salamanca tenerife "pntv" "slmn" "tnrf" tarragona teruel toledo "trrg" "terl" "told" zamora zaragoza "zamr" "zrgz" asturias "astr" caceres "ccrs" cordoba "crdb" huelva "hulv" lleida "lled" navarra "nvrr" segovia "segv" valencia "vlnc" Contar caracteres: nchar() Devuelve el número de caracteres de una cadena # Carga la lista de provincias de Internet provincias <- read.table("http://pastebin.com/raw.php?i=WAuJFUVU", sep="\t", stringsAsFactors=F) nchar(provincias$V1) ## [1] ## [24] ## [47] 8 6 6 5 8 6 4 8 10 8 7 8 10 7 6 8 4 8 5 6 7 4 8 6 9 6 6 7 7 6 5 7 3 9 7 9 5 11 8 10 9 7 8 6 7 6 7 7 11 5 9 9 6 3 3.1 Minúsculas y mayúsculas tolower() Convierte las mayúsculas a minúsculas may <- c("Selva", "BARCELONA") tolower(may) ## [1] "selva" 3.2 "barcelona" toupper() Convierte las minúsculas a mayúsculas min <- c("jardín","IMprevisTO") toupper(min) ## [1] "JARDÍN" "IMPREVISTO" 4 4 4.1 Establecer, comprobar o forzar variables a texto character() Crea un vector de texto. # Creamos un vector de texto vacío y de longitud 5 txt <- character(length = 5) # Asignamos valores a los elementos 2 y 4 txt[2] <- "dic" txt[4] <- 4 txt ## [1] "" 4.2 "dic" "" "4" "" is.character() Comprueba si un vector está formado por texto # Creamos un data frame con una columna de texto y otra numérica vec <- data.frame(txt=c("sol", "luna", "marte"), num = 4, stringsAsFactors = F) vec ## txt num ## 1 sol 4 ## 2 luna 4 ## 3 marte 4 is.character(vec$txt) ## [1] TRUE is.character(vec$num) ## [1] FALSE 4.3 as.character() Fuerza la conversión a texto num <- 1 / 8 txt <- as.character(num) num; txt ## [1] 0.125 ## [1] "0.125" 5 # Creamos un data frame con una columna de texto y otra numérica. # Si no se indica 'stringsAsFactors = F' el texto será considerado como factor vec <- data.frame(txt="sol",num = 4) class(vec$txt) ## [1] "factor" # Convertimos el factor en texto vec$txt <- as.character(vec$txt) class(vec$txt) ## [1] "character" 6 5 Unir y separar texto 5.1 paste() Une texto, si no se indica lo contrario con el parámetro “sep” el separador será un espacio. a <- "uno" b <- "dos" c <- 3 txt <- paste(a,b,c) txt ## [1] "uno dos 3" txt2 <- paste(a,b,c, sep = " + ") txt2 ## [1] "uno + dos + 3" txt3 <- paste("X",1:10, sep = "") txt3 ## [1] "X1" "X2" "X3" "X4" "X5" "X6" "X7" "X8" "X9" "X10" txt4 <- paste("X",1:10, sep = "", collapse = ".") txt4 ## [1] "X1.X2.X3.X4.X5.X6.X7.X8.X9.X10" 5.2 strsplit() Separa texto txt <- "Normalmente los domingos anteceden a los lunes" # Separa las palabras strsplit(txt," ") ## [[1]] ## [1] "Normalmente" "los" ## [6] "los" "lunes" "domingos" # Separa donde hay una "l" strsplit(txt,"l") ## ## ## ## [[1]] [1] "Norma" "mente " [3] "os domingos anteceden a " "os " [5] "unes" 7 "anteceden" "a" 6 6.1 Buscar y reemplazar texto substr() Extrae o reemplaza subcadenas en un vector de caracteres en la posición indicada Extracción de caracteres txt <- c("uno", "dos", "tres", "cuatro") # Extraemos los caracteres 3 y 4 substr(txt,3,4) ## [1] "o" "s" "es" "at" Substitución de caracteres txt <- c("uno", "dos", "tres", "cuatro") # Reemplazamos los caracteres 3 y 4 por "$%" substr(txt,3,4) <- "$%" txt ## [1] "un$" 6.2 "do$" "tr$%" "cu$%ro" sub() Busca la primera ocurrencia de un texto y lo sustituye por otro txt <- c("Entre el cielo y la tierra las nubes se deslizaban a la busca de su destino","La casa","uno") sub("la","¿¿??",txt, ignore.case = T) ## [1] "Entre el cielo y ¿¿?? tierra las nubes se deslizaban a la busca de su destino" ## [2] "¿¿?? casa" ## [3] "uno" 6.3 gsub() Busca las ocurrencias de un texto y los sustituye por otro txt <- c("Entre el cielo y la tierra las nubes se deslizaban a la busca de su destino","La casa","uno") gsub("la","¿¿??",txt, ignore.case = T) ## [1] "Entre el cielo y ¿¿?? tierra ¿¿??s nubes se deslizaban a ¿¿?? busca de su destino" ## [2] "¿¿?? casa" ## [3] "uno" 8 7 Buscar 7.1 grep() Busca elementos que contienen una determinada secuencia y devuelve la posición. txt <- c("Entre el cielo y la tierra las nubes se deslizaban a la busca de su destino","La casa","uno") grep("la",txt) ## [1] 1 7.2 grepl() Busca elementos que contienen una determinada secuencia y devuelve T o F txt <- c("Entre el cielo y la tierra las nubes se deslizaban a la busca de su destino","La casa","uno") grepl("la",txt, ignore.case = T) ## [1] 7.3 TRUE TRUE FALSE regexpr() Busca una secuencia de texto y devuelve la posición que ocupa dentro de cada elemento la primera aparición. El resultado devuelto es en forma de vector. txt <- c("Entre el cielo y la tierra las nubes se deslizaban a la busca de su destino","La casa","uno") regexpr("la",txt, ignore.case = T) ## ## ## ## ## [1] 18 1 -1 attr(,"match.length") [1] 2 2 -1 attr(,"useBytes") [1] TRUE 7.4 gregexpr() Busca una secuencia de texto y devuelve la posición que ocupa dentro de cada elemento en forma de lista. txt <- c("Entre el cielo y la tierra las nubes se deslizaban a la busca de su destino","La casa","uno") gregexpr("la",txt, ignore.case = T) ## ## ## ## ## ## ## [[1]] [1] 18 28 54 attr(,"match.length") [1] 2 2 2 attr(,"useBytes") [1] TRUE 9 ## ## ## ## ## ## ## ## ## ## ## ## ## [[2]] [1] 1 attr(,"match.length") [1] 2 attr(,"useBytes") [1] TRUE [[3]] [1] -1 attr(,"match.length") [1] -1 attr(,"useBytes") [1] TRUE 10