Saya memiliki kerangka data yang disebut "harga baru" (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 inilah yang saya lakukan:
names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice")
Saya belum menempatkan ini dalam satu lingkaran karena saya ingin setiap nama kolom berbeda seperti yang Anda lihat.
Ketika saya menempelkan program saya ke konsol R ini adalah output yang diberikannya kepada 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(“"
Saya telah sama-sama mencoba menggunakan c()
fungsi-misalnya c("premium")
, bukan paste()
fungsi, tetapi tidak berhasil.
Bisakah seseorang membantu saya untuk mencari tahu?
is.matrix
ataustr
.colnames(newprice)<- c("premium","change","newprice")
Jawaban:
Gunakan
colnames()
fungsinya:Anda juga dapat mengatur ulang:
sumber
colnames(X)[c(1,2)] <- c("good", "better")
setnames()
didata.table
paket. Gunakan sesuatu sepertisetnames(DT,"b","B")
atausetnames(DT,c("a","E"),c("A","F"))
q1
, mencoba untuk bermutasi menggunakan frame datadplyr
seperti dalamq1 <- q1 %>% mutate(rel_count = count / 482462)
hasil kesalahanError in mutate_impl(.data, dots) : unknown column 'days'
(di manadays
nama baru diberikan ke kolom). Ini benar-benar membuat frustrasi.Saya menggunakan ini:
sumber
Kesalahan ini disebabkan oleh "kutipan pintar" (atau apa pun namanya). Pelajaran di sini adalah, "jangan menulis kode Anda di 'editor' yang mengubah kutipan menjadi kutipan pintar".
Selain itu, Anda tidak perlu
paste("premium")
(panggilan kepaste
redundan) dan merupakan ide bagus untuk meletakkan spasi di sekitar<-
untuk menghindari kebingungan (misx <- -10; if(x<-3) "hi" else "bye"; x
.).sumber
Apakah Anda sudah mencoba:
names(newprice)[1]<-"premium"
?
sumber
Cara baru yang disarankan untuk melakukan ini adalah dengan menggunakan
setNames
fungsi. Lihat?setNames
. Karena ini membuat salinan baru daridata.frame
, pastikan untuk menetapkan hasilnya ke aslinyadata.frame
, jika itu niat Anda.Versi R yang lebih baru akan memberi Anda peringatan jika Anda menggunakannya
colnames
beberapa cara yang disarankan oleh jawaban sebelumnya.Jika ini
data.table
bukan, Anda bisa menggunakandata.table
fungsisetnames
, yang dapat mengubah nama kolom tertentu atau nama kolom tunggal dengan referensi :sumber
Saya memiliki masalah yang sama dan kode ini berhasil untuk saya.
Singkatnya, kode ini melakukan hal berikut:
names(data)
melihat ke semua nama dalam kerangka data (data
)[names(data) == oldVariableName]
ekstrak nama variabel (oldVariableName
) yang ingin Anda<- "newVariableName"
beri nama baru dan tetapkan nama variabel yang baru.sumber
Mirip dengan yang lain:
Cukup sederhana dan mudah dimodifikasi.
sumber
mencoba:
sumber
Jika Anda perlu mengganti nama tidak semua kecuali beberapa kolom sekaligus ketika Anda hanya tahu nama kolom lama, Anda dapat menggunakan
colnames
fungsi dan%in%
operator. Contoh:Sekarang Anda ingin mengubah "buruk" dan "terburuk" menjadi "baik" dan "terbaik". Kamu bisa menggunakan
Ini menghasilkan
sumber
Gunakan ini untuk mengubah nama kolom dengan fungsi colname.
sumber
Anda dapat melakukan pengeditan dengan:
dan ubah nama kolom secara manual.
sumber
> locanatmodelset<-edit(locanatmodelset) Error in edit.data.frame(locanatmodelset) : can only handle vector and factor elements
Nama kolom saya adalah seperti di bawah ini
Saya ingin mengubah nama kolom Kelas dan Jenis Kelamin
sumber
Ada beberapa opsi dengan
dplyr::rename()
dandplyr::select()
:Ada juga tiga varian cakupan
dplyr::rename()
:dplyr::rename_all()
untuk semua nama kolom,dplyr::rename_if()
untuk penargetan nama kolom, dandplyr::rename_at()
untuk kolom bernama terpilih. Contoh berikut menggantikan spasi dan titik dengan garis bawah dan mengubah semuanya menjadi huruf kecil:dplyr::select_all()
dapat juga digunakan dengan cara yang serupa:sumber
Hanya untuk memperbaiki dan sedikit memperluas jawaban Scott Wilson.
Anda dapat menggunakan data.table
setnames
fungsi data.table pada data.frame juga.Jangan berharap mempercepat operasi tetapi Anda dapat mengharapkannya
setnames
menjadi lebih efisien untuk konsumsi memori karena memperbarui nama kolom dengan referensi. Ini bisa dilacak denganaddress
fungsinya, lihat di bawah.Jadi jika Anda menekan batas memori Anda, Anda dapat mempertimbangkan untuk menggunakan yang ini sebagai gantinya.
sumber
Ini mungkin bermanfaat:
sumber
Jika kita memiliki 2 dataframe, karya-karya berikut
Kami mengubah nama DF1 sebagai berikut
sumber