Saya memiliki sebuah frame data yang disebut "baruharga" (lihat di bawah) dan saya ingin mengubah nama kolom dalam program saya di R.
> newprice
Chang. Chang. Chang.
1 100 36 136
2 120 -33 87
3 150 14 164
Sebenarnya ini adalah apa yang saya lakukan:
names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice")
Saya tidak menempatkan ini dalam loop karena saya ingin setiap kolom dengan nama yang berbeda seperti yang anda lihat.
Ketika saya paste program saya ke R konsol ini adalah output itu memberi saya:
> 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(“"
Aku telah sama-sama mencoba menggunakan c()
fungsi-misalnya c("premium")
, bukan paste()
fungsi, tetapi tidak berhasil.
Seseorang bisa membantu saya untuk mencari tahu ini?
Gunakan colnames()
fungsi:
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
Anda juga dapat subset:
R> colnames(X)[2] <- "superduper"
Saya menggunakan ini:
colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"
Kesalahan ini disebabkan oleh "smart-quotes" (atau apa pun yang mereka're disebut). Pelajaran di sini adalah, "don't menulis kode anda di 'editor' yang mengubah tanda kutip untuk pintar-quotes".
names(newprice)[1]<-paste(“premium”) # error
names(newprice)[1]<-paste("premium") # works
Juga, anda don't perlu paste("premium")
(panggilan untuk paste
adalah berlebihan) dan's merupakan ide yang baik untuk menempatkan ruang di sekitar <-
untuk menghindari kebingungan (misalnya x <- -10; jika(x<-3) "hi" lain "tinggal"; x
).
Baru direkomendasikan cara untuk melakukan ini adalah dengan menggunakan setNames
fungsi. Lihat
?setNames
. Karena hal ini menciptakan salinan baru dari data.frame
, pastikan untuk menetapkan hasil asli data.frame
, jika yang anda maksud.
data_frame <- setNames(data_frame, c("premium","change","newprice"))
Versi yang lebih baru dari R akan memberikan anda peringatan jika anda menggunakan colnames
dalam beberapa cara yang disarankan oleh jawaban sebelumnya.
Jika ini adalah data.tabel
sebagai gantinya, anda bisa menggunakan data.tabel
fungsi setnames
, yang dapat mengubah spesifik nama-nama kolom atau satu kolom nama by reference:
setnames(data_table, "old-name", "new-name")
Saya memiliki masalah yang sama dan ini bagian dari kode yang bekerja untuk saya.
names(data)[names(data) == "oldVariableName"] <- "newVariableName"
Singkatnya, ini kode berikut:
nama-nama(data)
melihat ke semua nama dalam dataframe (data
)
[nama(data) == oldVariableName]
ekstrak nama variabel (oldVariableName
) anda ingin mendapatkan dan berganti nama menjadi <- "newVariableName"
memberikan nama variabel baru.
Jika anda perlu untuk mengubah nama tidak semua tapi beberapa kolom sekaligus ketika anda hanya tahu tua kolom nama anda dapat menggunakan colnames
dan fungsi %di%
operator. Contoh:
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
Sekarang anda ingin mengubah "buruk" dan "terburuk" untuk "baik" dan "terbaik". Anda dapat menggunakan
colnames(df)[which(colnames(df) %in% c("bad","worst") )] <- c("good","best")
Hasil ini dalam
good worse best
1 1 -0.6010363 A
2 2 0.7336155 B
3 3 0.9435469 C
Hanya untuk yang benar dan sedikit memperpanjang Scott Wilson menjawab.
Anda dapat menggunakan data.meja's setnames
fungsi pada data.frame juga.
Jangan berharap kecepatan hingga operasi, tetapi anda dapat mengharapkan setnames
untuk menjadi lebih efisien untuk konsumsi memori seperti update nama-nama kolom referensi. Hal ini dapat dilacak dengan alamat
fungsi, lihat di bawah ini.
Ada beberapa pilihan dengan dplyr::rename()
dan 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
Ada juga tiga scoped varian dari dplyr::rename()
: dplyr::rename_all()
untuk semua kolom nama, dplyr::rename_if()
untuk kondisional menargetkan kolom nama, dan dplyr::rename_at()
untuk pilih nama kolom. Berikut contoh menggantikan ruang dan periode dengan garis bawah dan mengubah segalanya untuk kasus yang lebih rendah:
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()
juga dapat digunakan dalam cara yang sama:
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
Ini mungkin dapat membantu:
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'))