José Miguel Contreras
2011-Mar-20 19:38 UTC
[R-es] Reemplazar caracteres (nombres y apellidos) con tildes por vocales sin tildes.
Hola a todos, quisiera reemplazar caracteres (nombres y apellidos) con tildes por caracteres sin acentos. Ejemplo: "Ana" "Morales" "Díaz" "María José" "de la Fuente" "Pérez" Por "Ana" "Morales" "Diaz" "Maria Jose" "de la Fuente" "Perez" Y además si sabéis como coger una parte de los caracteres y ponerlos en otros "Maria Jose" "de la Fuente" "Perez" Por "Maria Jose de la" "Fuente" "Perez" Gracias [[alternative HTML version deleted]]
Jorge Ivan Velez
2011-Mar-20 20:18 UTC
[R-es] Reemplazar caracteres (nombres y apellidos) con tildes por vocales sin tildes.
Buenas tardes José Miguel, La primera parte puedes hacerla con varios ifelse (ver codigo en la parte inferior) o utilizando la funcion recode de car. Combinar los nombres como describes en la segunda parte del email es un poco mas complejo, pero una aproximacion seria la utilizacion de strsplit() en combinacion con %in% y toupper(). Saludos, Jorge Ivan Velez # funcion para cambiar las tildes # x es el nombre a cambiar foo <- function(x){ x <- strsplit(x, '''')[[1]] y <- ifelse(x == "á", ''a'', ifelse(x == "é", ''e'', ifelse(x == "í", ''i'', ifelse(x == "ó", ''o'', ifelse(x == "ú", ''u'', x))))) paste(y, sep = "", collapse = "") } # ejemplo 1 x <- "María José" x foo(x) # ejemplo 2 -- asumiendo que lees los nombres via read.table() d <- data.frame(t(data.frame( c("Ana", "Morales", "Díaz"), c("María José", "de la Fuente", "Pérez") ))) colnames(d) <- c(''Nombre'', ''Apellido1'', ''Apellido2'') rownames(d) <- NULL d # transformacion d[,] <- apply(d, 2, function(x) sapply(x, foo)) d * * 2011/3/20 José Miguel Contreras <>> > Hola a todos, quisiera reemplazar caracteres (nombres y apellidos) con > tildes por caracteres sin acentos. > > Ejemplo: > > "Ana" "Morales" "Díaz" > > "María José" "de la Fuente" "Pérez" > > Por > > "Ana" "Morales" "Diaz" > > "Maria Jose" "de la Fuente" "Perez" > > Y además si sabéis como coger una parte de los caracteres y ponerlos en > otros > > "Maria Jose" "de la Fuente" "Perez" > > Por > > "Maria Jose de la" "Fuente" "Perez" > > Gracias > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Carlos Ortega
2011-Mar-20 21:04 UTC
[R-es] Reemplazar caracteres (nombres y apellidos) con tildes por vocales sin tildes.
Hola, Utiliza la librería stringr() que sacó recientemente Hadley Wickham. Es una librería que permite la manipulación de cadenas de caracteres de una forma muy sencilla.> x<-c(''María'') > > str_replace_all(x,"í","i")[1] "Maria" Y para el segundo caso, la solución que veo es una ad hoc. Construída a base de juntar y separar las cadenas vía str_c (para juntar) y str_split (para separar).> y<-c("Maria Jose", "de la Fuente", "Perez") > z<-str_c(y[1],y[2],sep=" ") > z[1] "Maria Jose de la Fuente"> cadena_separa<-c('' la '') > w<-unlist(str_split(z,cadena_separa, n=2)) > w[1] "Maria Jose de" "Fuente"> w[1]<-str_c(w[1], cadena_separa) > w[1] "Maria Jose de la " "Fuente">Saludos, Carlos Ortega www.qualityexcellence.es 2011/3/20 José Miguel Contreras <jmcontreras@ugr.es>> > Hola a todos, quisiera reemplazar caracteres (nombres y apellidos) con > tildes por caracteres sin acentos. > > Ejemplo: > > "Ana" "Morales" "Díaz" > > "María José" "de la Fuente" "Pérez" > > Por > > "Ana" "Morales" "Diaz" > > "Maria Jose" "de la Fuente" "Perez" > > Y además si sabéis como coger una parte de los caracteres y ponerlos en > otros > > "Maria Jose" "de la Fuente" "Perez" > > Por > > "Maria Jose de la" "Fuente" "Perez" > > Gracias > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
guivivi en alumni.uv.es
2011-Mar-21 08:16 UTC
[R-es] Reemplazar caracteres (nombres y apellidos) con tildes por vocales sin tildes.
Hola José Miguel, Para lo de los acentos, yo también uso la función gsub():> a <- "Pérez" > a[1] "Pérez"> a <- gsub("Pérez", "Perez",a) > a[1] "Perez" Un saludo, Guillermo> > Hola a todos, quisiera reemplazar caracteres (nombres y apellidos) con > tildes por caracteres sin acentos. > > Ejemplo: > > "Ana" "Morales" "Díaz" > > "María José" "de la Fuente" "Pérez" > > Por > > "Ana" "Morales" "Diaz" > > "Maria Jose" "de la Fuente" "Perez" > > Y además si sabéis como coger una parte de los caracteres y ponerlos en > otros > > "Maria Jose" "de la Fuente" "Perez" > > Por > > "Maria Jose de la" "Fuente" "Perez" > > Gracias > > > [[alternative HTML version deleted]] > >
José Miguel Contreras
2011-Mar-21 14:56 UTC
[R-es] Reemplazar caracteres (nombres y apellidos) con tildes por vocales sin tildes.
Sigo con problemas a la hora de coger una parte de los caracteres y ponerlos en otros cuando utilizo bucles "Maria Jose" "de la Fuente" "Perez" Por "Maria Jose de la" "Fuente" "Perez" Más o menos lo he conseguido utilizando el paquete stringr pero me dá un error al final y cambia los datos por NA > library(stringr) > read.table("a.txt")->data > data V1 V2 V3 1 Ana Morales Díaz 2 Francisco Javier de la Fuente Izaguirre 3 María José Sánchez Perez 4 Jose M. Perez Sánchez > > as.data.frame(data)->data > > a=matrix(0,nrow(data),ncol(data)) > > #Detecto donde está el ''de la'' > > for(i in 1:nrow(data)) { + for(j in 1:ncol(data)) { + str_detect(data[i,j], "de la") -> a[i,j] + } + } > > #Reemplazar > > for(i in 1:nrow(data)) { + for(j in 1:ncol(data)) { + if(a[i,j]== 1){ + b<-1:ncol(data) + z<-str_c(data[i,1],data[i,j],sep=" ") + cadena_separa<-c(''de la'') + w<-unlist(str_split(z,cadena_separa, n=2)) + v<-unlist(str_split(z,w[2], n=2)) + b[1]<- as.character(v[1]) + b[2]<- as.character(w[2]) + b[3:ncol(data)] =data[i,3:ncol(data)] + data[i,]<-paste(b[1],b[2],b[3:ncol(data)]) + } + else data[i,j]<-data[i,j] + } + } Mensajes de aviso perdidos 1: In `[<-.factor`(`*tmp*`, iseq, value = "Francisco Javier de la Fuente 2") : invalid factor level, NAs generated 2: In `[<-.factor`(`*tmp*`, iseq, value = "Francisco Javier de la Fuente 2") : invalid factor level, NAs generated 3: In `[<-.factor`(`*tmp*`, iseq, value = "Francisco Javier de la Fuente 2") : invalid factor level, NAs generated > > data V1 V2 V3 1 Ana Morales Díaz 2 <NA> <NA> <NA> 3 María José Sánchez Perez 4 Jose M. Perez Sánchez > Hola a todos, quisiera reemplazar caracteres (nombres y apellidos) con tildes por caracteres sin acentos. Ejemplo: "Ana" "Morales" "Díaz" "María José" "de la Fuente" "Pérez" Por "Ana" "Morales" "Diaz" "Maria Jose" "de la Fuente" "Perez" Y además si sabéis como coger una parte de los caracteres y ponerlos en otros "Maria Jose" "de la Fuente" "Perez" Por "Maria Jose de la" "Fuente" "Perez" Gracias [[alternative HTML version deleted]]
Carlos Ortega
2011-Mar-21 20:32 UTC
[R-es] Reemplazar caracteres (nombres y apellidos) con tildes por vocales sin tildes.
Hola, Prueba con este código que sí que permite la sustitución. El problema con este código es que tan sólo modifica la cadena "de la". Si quisieras detectar los nombres y apellidos compuestos, habría que pensar en otro algoritmo. ############## data<-data.frame( V1=c(''Ana'', ''Francisco Javier de la'', ''María José'',''Jose M''), V2=c(''Morales'',''Fuente'',''Sánchez'',''Perez''), V3=c(''Díaz'',''Izaguirre'',''Perez'',''Sánchez'') ) data cad_sep<-c(''de la'') dat.new<-as.data.frame(matrix(0,nrow(data),ncol(data))) cont<-0 for(i in 1:dim(data)[1]) { for(j in 1:dim(data)[2]){ comp.dat<-str_detect(data[i,j],cad_sep) if(comp.dat=="TRUE") { dat.new[i,j]<-as.vector(str_replace(data[i,j],cad_sep,"")) cont<-1 } else { if(cont==1) { dat.new[i,j]<-as.vector(str_c(cad_sep,data[i,j],sep=" ")) cont<-0 } else { dat.new[i,j]<-as.vector(data[i,j]) cont<-0 } } } } dat.new dat.new[2,2] ########################### Saludos, Carlos Ortega www.qualityexcellence.es 2011/3/21 José Miguel Contreras <jmcontreras@ugr.es>> Sigo con problemas a la hora de coger una parte de los caracteres y > ponerlos en otros cuando utilizo bucles > > "Maria Jose" "de la Fuente" "Perez" > > Por > > "Maria Jose de la" "Fuente" "Perez" > > > > Más o menos lo he conseguido utilizando el paquete stringr pero me dá un > error al final y cambia los datos por NA > > > library(stringr) > > read.table("a.txt")->data > > data > V1 V2 V3 > 1 Ana Morales Díaz > 2 Francisco Javier de la Fuente Izaguirre > 3 María José Sánchez Perez > 4 Jose M. Perez Sánchez > > > > as.data.frame(data)->data > > > > a=matrix(0,nrow(data),ncol(data)) > > > > #Detecto donde está el ''de la'' > > > > for(i in 1:nrow(data)) { > + for(j in 1:ncol(data)) { > + str_detect(data[i,j], "de la") -> a[i,j] > + } > + } > > > > #Reemplazar > > > > for(i in 1:nrow(data)) { > + for(j in 1:ncol(data)) { > + if(a[i,j]== 1){ > + b<-1:ncol(data) > + z<-str_c(data[i,1],data[i,j],sep=" ") > + cadena_separa<-c(''de la'') > + w<-unlist(str_split(z,cadena_separa, n=2)) > + v<-unlist(str_split(z,w[2], n=2)) > + b[1]<- as.character(v[1]) > + b[2]<- as.character(w[2]) > + b[3:ncol(data)] =data[i,3:ncol(data)] > + data[i,]<-paste(b[1],b[2],b[3:ncol(data)]) > + } > + else data[i,j]<-data[i,j] > + } > + } > Mensajes de aviso perdidos > 1: In `[<-.factor`(`*tmp*`, iseq, value = "Francisco Javier de la > Fuente 2") : > invalid factor level, NAs generated > 2: In `[<-.factor`(`*tmp*`, iseq, value = "Francisco Javier de la > Fuente 2") : > invalid factor level, NAs generated > 3: In `[<-.factor`(`*tmp*`, iseq, value = "Francisco Javier de la > Fuente 2") : > invalid factor level, NAs generated > > > > data > V1 V2 V3 > 1 Ana Morales Díaz > 2 <NA> <NA> <NA> > 3 María José Sánchez Perez > 4 Jose M. Perez Sánchez > > > > > Hola a todos, quisiera reemplazar caracteres (nombres y apellidos) con > tildes por caracteres sin acentos. > > Ejemplo: > > "Ana" "Morales" "Díaz" > > "María José" "de la Fuente" "Pérez" > > Por > > "Ana" "Morales" "Diaz" > > "Maria Jose" "de la Fuente" "Perez" > > Y además si sabéis como coger una parte de los caracteres y ponerlos en > otros > > "Maria Jose" "de la Fuente" "Perez" > > Por > > "Maria Jose de la" "Fuente" "Perez" > > Gracias > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]