Cambiar los nombres de columna de un dataframe

Tengo un dataframe llamado “nuevo precio” (ver más abajo) y quiero cambiar los nombres de las columnas en mi progtwig en R.

> newprice Chang. Chang. Chang. 1 100 36 136 2 120 -33 87 3 150 14 164 

De hecho, esto es lo que estoy haciendo:

 names(newprice)[1]<-paste("premium") names(newprice)[2]<-paste("change") names(newprice)[3]<-paste("newprice") 

No puse esto en un bucle porque quiero que cada nombre de columna sea diferente, como puede ver.

Cuando pego mi progtwig en la consola R, este es el resultado que me da:

 > names(newprice)[1]<-paste(“premium”) Error: unexpected input in "names(newprice)[1] names(newprice)[2]<-paste(“change”) Error: unexpected input in "names(newprice)[2] names(newprice)[3]<-paste(“newpremium”) Error: unexpected input in "names(newprice)[3]<-paste(“" 

También he intentado usar la función c() , por ejemplo c("premium") , en lugar de la función paste() , pero fue en vano.

¿Alguien podría ayudarme a resolver esto?

Use la función colnames() :

 R> X <- data.frame(bad=1:3, worse=rnorm(3)) R> X bad worse 1 1 -2.440467 2 2 1.320113 3 3 -0.306639 R> colnames(X) <- c("good", "better") R> X good better 1 1 -2.440467 2 2 1.320113 3 3 -0.306639 

También puede subconjunto:

 R> colnames(X)[2] <- "superduper" 

Yo uso esto:

 colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName" 

El error es causado por las “comillas inteligentes” (o como se llamen). La lección aquí es: “no escriba su código en un ‘editor’ que convierta las comillas en citas inteligentes”.

 names(newprice)[1]<-paste(“premium”) # error names(newprice)[1]<-paste("premium") # works 

Además, no necesita paste("premium") (la llamada a paste es redundante) y es una buena idea colocar espacios alrededor de <- para evitar confusiones (por ejemplo, x <- -10; if(x<-3) "hi" else "bye"; x ).

¿Has intentado solo?

names(newprice)[1]<-"premium"

?

La nueva forma recomendada de hacerlo es usar la función setNames . Ver ?setNames . Como esto crea una nueva copia de data.frame , asegúrese de asignar el resultado al data.frame original, si esa es su intención.

 data_frame <- setNames(data_frame, c("premium","change","newprice")) 

Las versiones más recientes de R le advertirán si usa colnames en algunas de las formas sugeridas por las respuestas anteriores.

Si fuera una data.table en data.table lugar, podría usar los data.table funciones de setnames , que pueden modificar nombres de columna específicos o un nombre de columna individual por referencia :

 setnames(data_table, "old-name", "new-name") 

Tuve el mismo problema y este código funcionó para mí.

 names(data)[names(data) == "oldVariableName"] <- "newVariableName" 

En resumen, este código hace lo siguiente:

names(data) busca en todos los nombres en el marco de data ( data )

[names(data) == oldVariableName] extrae el nombre de la variable ( oldVariableName ) que desea renombrar y <- "newVariableName" asigna el nuevo nombre de la variable.

Similar a los otros:

 cols <- c("premium","change","newprice") colnames(dataframe) <- cols 

Muy simple y fácil de modificar.

Puedes hacer la edición por:

 newprice <- edit(newprice) 

y cambie el nombre de columna manualmente.

tratar:

 names(newprice) <- c("premium", "change", "newprice") 

Si necesita cambiar el nombre de todas las columnas colnames a la vez cuando solo conoce los nombres de las columnas anteriores, puede usar la función colnames y el operador %in% . Ejemplo:

 df = data.frame(bad=1:3, worse=rnorm(3), worst=LETTERS[1:3]) bad worse worst 1 1 -0.77915455 A 2 2 0.06717385 B 3 3 -0.02827242 C 

Ahora quiere cambiar “mal” y “peor” a “bueno” y “mejor”. Puedes usar

 colnames(df)[which(colnames(df) %in% c("bad","worst") )] <- c("good","best") 

Esto resulta en

  good worse best 1 1 -0.6010363 A 2 2 0.7336155 B 3 3 0.9435469 C 

Solo para corregir y extender levemente la respuesta de Scott Wilson.
También puede usar la función setnames de setnames en data.frames.

No espere acelerar la operación, pero puede esperar que los setnames de conjunto sean más eficientes para el consumo de memoria a medida que actualiza los nombres de las columnas por referencia. Esto se puede rastrear con la función de address , ver a continuación.

 library(data.table) set.seed(123) n = 1e8 df = data.frame(bad=sample(1:3, n, TRUE), worse=rnorm(n)) address(df) #[1] "0x208f9f00" colnames(df) <- c("good", "better") address(df) #[1] "0x208fa1d8" rm(df) dt = data.table(bad=sample(1:3, n, TRUE), worse=rnorm(n)) address(dt) #[1] "0x535c830" setnames(dt, c("good", "better")) address(dt) #[1] "0x535c830" rm(dt) 

Entonces, si está alcanzando sus límites de memoria, puede considerar usar este en su lugar.

Podrías haber hecho inmediatamente

 names(newprice) <- c("premium","change","newprice") 

El comando pegar que está utilizando toma 2 argumentos al menos. Funciona como una función de concatenación en excel, por lo que creo que te está dando un error.

Esto puede ser útil:

 rename.columns=function(df,changelist){ #renames columns of a dataframe for(i in 1:length(names(df))){ if(length(changelist[[names(df)[i]]])>0){ names(df)[i]= changelist[[names(df)[i]]] } } df } 

df = rename.columns (df, list (old.column = ‘new.column.name’))

Mis nombres de columna son los siguientes

 colnames(t) [1] "Class" "Sex" "Age" "Survived" "Freq" 

Quiero cambiar el nombre de columna de Clase y Sexo

 colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ") 

En caso de que tengamos 2 dataframes, los siguientes trabajos

  DF1<-data.frame('a', 'b') DF2<-data.frame('c','d') 

Cambiamos los nombres de DF1 de la siguiente manera

  colnames(DF1)<- colnames(DF2) 

Hay un par de opciones con dplyr :

 library(dplyr) mtcars %>% tibble::rownames_to_column('car_model') %>% # convert rowname to a column. tibble must be installed. select(car_model, est_mpg = mpg, horse_power = hp, everything()) %>% # rename specific columns and reorder rename(weight = wt, cylinders = cyl) %>% # another option for renaming specific columns head(2) car_model est_mpg horse_power cylinders disp drat weight qsec vs am gear carb 1 Mazda RX4 21 110 6 160 3.9 2.620 16.46 0 1 4 4 2 Mazda RX4 Wag 21 110 6 160 3.9 2.875 17.02 0 1 4 4 

dplyr::select_all() también se puede usar para reformatear nombres de columna. 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