studio - Cómo arreglar espacios en nombres de columna de un data.frame(eliminar espacios, inyectar puntos)?
seleccionar datos en r (8)
Alternativamente, puede lograr los mismos resultados con el paquete stingr.
names(ctm2)<-names(ctm2)%>% stringr::str_replace_all("//s","_")
Después de importar un archivo, siempre trato de eliminar los espacios de los nombres de las columnas para facilitar la referencia a los nombres de las columnas.
¿Hay una mejor manera de hacer esto que usar Transformar y luego quitar la columna extra que crea este comando?
Esto es lo que uso ahora:
names(ctm2)
#tranform function does this, but requires some action
ctm2<-transform(ctm2,dymmyvar=1)
#remove dummy column
ctm2$dymmyvar <- NULL
names(ctm2)
Asigna los nombres de esta manera. Esto funciona mejor Reemplaza todos los espacios en blanco en el nombre con guión bajo.
names(ctm2)<-gsub("//s","_",names(ctm2))
Existe una solución más elegante y general para ese propósito:
tidy.name.vector <- make.names(name.vector, unique=TRUE)
make.names()
hace nombres sintácticamente válidos fuera de los vectores de caracteres. Un nombre sintácticamente válido consiste en letras, números y los caracteres de punto o subrayado y comienza con una letra o el punto no seguido de un número.
Además, flag unique=TRUE
permite evitar posibles duplicados en los nuevos nombres de columna.
Como código para implementar
d<-read_delim(urltxt,delim=''/t'',)
names(d)<-make.names(names(d),unique = TRUE)
Hay una manera fácil de eliminar espacios en los nombres de columnas en data.table. Tendrá que convertir su marco de datos en tabla de datos.
setnames(x=DT, old=names(DT), new=gsub(" ","",names(DT)))
Country Code
se convertirá a CountryCode
Para reemplazar solo el primer espacio en cada columna, también puede hacer:
names(ctm2) <- sub(" ", ".", names(ctm2))
o para reemplazar todos los espacios (lo que parece que sería un poco más útil):
names(ctm2) <- gsub(" ", "_", names(ctm2))
o, como se menciona en la primera respuesta (aunque no de una manera que arreglaría todos los espacios):
spaceless <- function(x) {colnames(x) <- gsub(" ", "_", colnames(x));x}
newDF <- spaceless(ctm2)
donde x es el nombre de su data.frame. Prefiero usar "_" para evitar problemas con "." como parte de una identificación.
El punto es que gsub no se detiene en la primera instancia de una coincidencia de patrón.
Simplemente asigne names(ctm2)
:
names(ctm2) <- c("itsy", "bitsy", "eeny", "meeny")
o de manera manejada por datos:
names(ctm2) <- paste("myColumn", 1:ncol(ctm2), sep="")
Otra posibilidad es editar su archivo fuente ...
la solución dplyr es
df %>% dplyr::rename_all(funs(make.names(.)))
el crédito va al comentarista
dplyr::select_all()
se puede usar para reformatear los nombres de las columnas. Este ejemplo reemplaza espacios y puntos con un guión bajo y convierte todo en minúsculas:
iris %>%
select_all(~gsub("//s+|//.", "_", .)) %>%
select_all(tolower) %>%
head(2)
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