Am un cadru de date numit "newprice" (a se vedea mai jos) și nu doriți să modificați numele coloanelor în programul meu în R.
> newprice
Chang. Chang. Chang.
1 100 36 136
2 120 -33 87
3 150 14 164
În fapt, aceasta este ceea ce fac:
names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice")
Nu am pus acest lucru într-o buclă pentru că vreau ca fiecare nume de coloană să fie diferite după cum vedeți.
Când am inserați codul programului meu în R consola asta este rezultatul imi 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(“"
Am la fel de încercat, folosind c()
funcția-de exemplu c("premium")
, în loc de pastă () funcția, dar fără nici un rezultat.
Ar putea cineva să mă ajute să rezolv asta?
Folosi colnames()
funcția:
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
De asemenea, puteți subset:
R> colnames(X)[2] <- "superduper"
Eu folosesc asta:
colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"
Eroarea este cauzată de "smart-citate" (sau oricare ar fi acestea're numit). Lecția de aici este, "nu't scrie cod într-un 'editor' care convertește citate inteligente-citate".
names(newprice)[1]<-paste(“premium”) # error
names(newprice)[1]<-paste("premium") # works
De asemenea, don't nevoie de paste("premium")(apelul de a "lipi" este redundantă) și it's o idee bună pentru a pune spații în jurul valorii de
< - pentru a evita o confuzie (de exemplu x <- -10; if(x<-3) "buna" altfel "la revedere"; x
).
Noul recomandat mod de a face acest lucru este de a utiliza setNames funcția. Vezi
?setNames. Deoarece acest lucru creează o nouă copie a datelor.cadru
, asigurați-vă că pentru a atribui rezultatul original de date.cadru`, dacă asta este intenția ta.
data_frame <- setNames(data_frame, c("premium","change","newprice"))
Versiunile mai noi de R va da avertisment dacă utilizați colnames
în unele moduri sugerat de mai devreme răspunsuri.
Dacă acest lucru s-a a datelor.masă
în schimb, ai putea folosi datele.tabelul "funcție" setnames`, care pot modifica anumite nume de coloană sau un singur nume de coloană by reference:
setnames(data_table, "old-name", "new-name")
Am avut aceeasi problema si aceasta bucata de cod a lucrat pentru mine.
names(data)[names(data) == "oldVariableName"] <- "newVariableName"
Pe scurt, acest cod face următoarele:
nume(de date)` se uită în toate numele din dataframe ("date")
[nume(de date) == oldVariableName]
extracte numele variabilei (oldVariableName
) doriți să obțineți redenumit și <- "newVariableName"
atribuie un nou nume de variabilă.
Dacă aveți nevoie pentru a redenumi nu toate dar mai multe de coloana la o dată atunci când știi doar vechiul nume de coloană puteți folosi colnames funcția și de %în%
operator. Exemplu:
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
Acum vrei pentru a schimba "rau" și "mai rău" pentru "bun" și "cel mai bun". Puteți utiliza
colnames(df)[which(colnames(df) %in% c("bad","worst") )] <- c("good","best")
Acest lucru duce la
good worse best
1 1 -0.6010363 A
2 2 0.7336155 B
3 3 0.9435469 C
Doar pentru a corecta și de a extinde ușor Scott Wilson răspuns. Puteți utiliza datele.tabelul's `setnames funcția pe date.rame.
Nu se aștepta la viteza de operare, dar vă puteți aștepta la setnames
pentru a fi mai eficient pentru consumul de memorie ca se actualizează coloana nume de referință. Acest lucru poate fi urmărită cu "adresă" funcția, vezi mai jos.
Există câteva opțiuni cu dplyr::rename () " și " dplyr::select()`:
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
Există, de asemenea, trei domenii variante de dplyr::rename():
dplyr::rename_all()pentru toate numele de coloane,
dplyr::rename_if () pentru anumite condiții de direcționare nume de coloană, și `dplyr::rename_at () pentru a selecta coloane cu nume. Următorul exemplu înlocuiește spații și perioade cu o subliniere și transformă totul pentru a reduce caz:
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
dplyr::select_all()
poate fi de asemenea utilizat într-un mod similar:
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
Acest lucru poate fi de ajutor:
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
}
# Specify new dataframe
df=rename.columns(df,list(old.column='new.column.name'))