names(mydat)[c(name)]<-c("newname")
A partir de esto, sé que el nombre de columna / variable "nombre" del marco de datos mydat se reemplaza con "nombre nuevo".
Mi pregunta es si, quiero hacer esto por un bucle para tener algo como:
newname1 newname2 newname3 newname4 y así sucesivamente, ¿cómo lo hago?
Esto es lo que funcionó y no funcionó:
for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}
¿Hay alguna manera de codificar esto? Muchas gracias a todos los que pudieron ser de ayuda. Owusu Isaac
ugly_vars <- names(dplyr::select(df, starts_with("abcde_")))
names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
Respuestas:
La solución más obvia sería cambiar su código for loop con lo siguiente:
Pero necesita aclarar cuál es su variable
name
. Por el momento, este bucle hará 4 cambios de nombre de la columna individual.En general, si los nombres que desea cambiar están en vector, este es un procedimiento de subconjunto estándar:
fuente
Intente usar
sprintf
opaste
, de esta manera:Además, tenga en cuenta que el
names(mydat)[c(name)]
es un sin sentido más;c(name)
es equivalente a escribir soloname
y significa "obtener el valor de la variable llamadaname
'; el corchete extraerá al menos elementos denames(mydat)
pero solo si laname
variable contiene un índice numérico o booleano.Si desea reemplazar columnas llamadas
name
conname1, name2, ..., nameN
, use algo como esto:EDITAR: Bueno, si solo desea eliminar nombres de columna duplicados, hay una manera aún más fácil; R tiene una
make.names
función que soluciona este problema; se puede usar así:Aún más corto, lo mismo solo se puede obtener escribiendo:
fuente
grepl
estaría bien hacer el trabajo más general.Tuve el mismo problema y lo resolví con este código:
fuente