Cadenas de texto

Anuncio
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
Descargar