superponer - Cambio de nombres de columna de un marco de datos
superponer graficas en r (16)
¿Lo intentaste solo?
names(newprice)[1]<-"premium"
?
Tengo un marco de datos llamado "newprice" (ver más abajo) y quiero cambiar los nombres de columna en mi programa 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 he puesto esto en un bucle porque quiero que el nombre de cada columna sea diferente como se ve.
Cuando pego mi programa en la consola R, esta es la salida que me da:
> names(newprice)[1]<-paste(“premium”)
Error: unexpected input in "names(newprice)[1]<-paste(“"
> names(newprice)[2]<-paste(“change”)
Error: unexpected input in "names(newprice)[2]<-paste(“"
> names(newprice)[3]<-paste(“newpremium”)
Error: unexpected input in "names(newprice)[3]<-paste(“"
Igualmente he intentado usar la función c()
, por ejemplo, c("premium")
, en lugar de la función paste()
, pero sin éxito.
¿Podría alguien ayudarme a resolver esto?
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 comillas en comillas 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
).
En caso de que tengamos 2 marcos de datos los siguientes trabajos
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 that keeps everything by default
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
Cambio los nombres de DF1 como sigue
iris %>%
rename_all(~gsub("//s+|//.", "_", .)) %>%
rename_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
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''))
Hay un par de opciones con dplyr::rename()
y dplyr::select()
:
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
También hay tres variantes de ámbito de dplyr::rename()
: dplyr::rename_all()
para todos los nombres de columna, dplyr::rename_if()
para nombres de columna de orientación condicional, y dplyr::rename_at()
para columnas con nombre seleccionado. El siguiente ejemplo reemplaza espacios y puntos con un guión bajo y convierte todo a minúsculas:
DF1<-data.frame(''a'', ''b'')
DF2<-data.frame(''c'',''d'')
dplyr::select_all()
también se puede utilizar de una manera similar:
colnames(DF1)<- colnames(DF2)
La nueva forma recomendada de hacer esto es usar la función setNames
. Ver ?setNames
. Dado que esto crea una nueva copia del 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 colnames
si utiliza colnames
de colnames
en algunas de las formas sugeridas por las respuestas anteriores.
Si se tratara de una data.table
, podría usar los data.table
función setnames
, que pueden modificar nombres de columna específicos o un nombre de columna única por referencia :
setnames(data_table, "old-name", "new-name")
Mis nombres de columna son los siguientes
colnames(t)
[1] "Class" "Sex" "Age" "Survived" "Freq"
Quiero cambiar el nombre de la columna de Clase y Sexo
colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ")
Podrías haberlo hecho de inmediato.
names(newprice) <- c("premium","change","newprice")
El comando de pegar que está utilizando toma 2 argumentos al menos. Funciona como la función de concatenar en Excel, por lo que creo que le está dando un error.
Sólo para corregir y extender ligeramente la respuesta de Scott Wilson.
También puede utilizar la función setnames de setnames
en data.frames.
No espere que la operación se setnames
pero puede esperar que los setnames
los setnames
sean más eficientes para el consumo de memoria, ya que actualiza los nombres de las columnas por referencia. Esto puede ser seguido con la función de address
, ver más abajo.
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)
Así que si está alcanzando sus límites de memoria, puede considerar usar este en su lugar.
Si necesita renombrar no todas las columnas, sino varias, a la vez, cuando solo conoce los nombres antiguos de las columnas, 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 desea cambiar "malo" 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
Similar a los demás:
cols <- c("premium","change","newprice")
colnames(dataframe) <- cols
Bastante simple y fácil de modificar.
Tuve el mismo problema y esta pieza de 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
) al que desea que se le oldVariableName
nombre y <- "newVariableName"
asigna el nuevo nombre de la variable.
Usa 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 subcontratar:
R> colnames(X)[2] <- "superduper"
Usted puede simplemente hacer la edición por:
newprice <- edit(newprice)
y cambiar el nombre de la columna manualmente.
Yo uso esto:
colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"
tratar:
names(newprice) <- c("premium", "change", "newprice")