Bagaimana cara mengubah nama kolom dalam bingkai data di R? [Tutup]

9
 names(mydat)[c(name)]<-c("newname") 

Dari ini, saya tahu bahwa kolom / nama variabel "nama" dari bingkai data mydat diganti dengan "nama baru".

Pertanyaan saya adalah apakah, saya ingin melakukan ini secara berulang sehingga saya akan memiliki beberapa hal seperti:

newname1 newname2 newname3 newname4 dan seterusnya, bagaimana saya melakukannya?

Inilah yang berhasil dan tidak berhasil:

for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}

Apakah ada cara untuk kode ini? terima kasih banyak untuk semua yang bisa membantu. Owusu Isaac

Putra
sumber
4
Pertanyaan ini tampaknya di luar topik karena ini murni tentang pemrograman.
gung - Reinstate Monica
Jika Anda perlu mengganti nama beberapa nama variabel jelek (mis. Abcde_1_1, abcde_2_2, abcde_3_3 ...) seperti yang sering terjadi pada beberapa set data yang diunduh dari Qualtrics: ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
JetLag

Jawaban:

10

Solusi paling jelas adalah mengubah kode Anda untuk loop dengan yang berikut ini:

   names(mydat)[c(name)] <- paste("newname",i,sep="")

Tetapi Anda perlu mengklarifikasi apa variabel Anda name. Saat ini, loop ini akan melakukan 4 penggantian nama dari kolom tunggal.

Secara umum jika nama yang ingin Anda ubah adalah dalam vektor, ini adalah prosedur berlangganan standar:

 names(mydat)[names(mydat)%in% names_to_be_changed] <- name_changes
mpiktas
sumber
Halo Mpikta, solusi Anda bekerja dengan sangat baik. terimakasih banyak. dan terima kasih untuk semuanya juga
Son
1
@Wuuu, ungkapan terima kasih di situs ini mengangkat jawaban dan penerimaannya. Lihat faq . Bagaimanapun, senang bisa membantu.
mpiktas
6

Coba gunakan sprintfatau paste, seperti ini:

names(mydat)<-sprintf("name%d",1:10)

Juga, perhatikan bahwa names(mydat)[c(name)]ini adalah omong kosong; c(name)setara dengan menulis adil namedan berarti "mendapatkan nilai dari variabel yang disebut name'; braket akan setidaknya mengekstraksi elemen names(mydat)tetapi hanya jika namevariabel memiliki indeks numerik atau boolean.

Jika Anda ingin mengganti kolom yang disebut namedengan name1, name2, ..., nameN, gunakan sesuatu seperti ini:

names(mydat)[names(mydat)=="name"]<-sprintf("name%d",1:sum(names(mydat)=="name"))

EDIT: Ya, jika Anda hanya ingin menghapus nama kolom yang digandakan, ada cara yang lebih mudah; R memiliki make.namesfungsi yang memperbaiki masalah ini; dapat digunakan seperti ini:

names(mydat)<-make.names(names(mydat),unique=TRUE)

Bahkan lebih pendek, hal yang sama hanya dapat diperoleh dengan menulis:

data.frame(mydat)->mydat #The magic is in check.names, but it is TRUE by default

sumber
@ mbq, == apakah sebagian cocok dengan string?
mpiktas
@mpiktas Tidak, tetapi hanya pencocokan tepat diperlukan di sini. greplakan baik-baik saja untuk melakukan pekerjaan yang lebih umum.
@ MBb, ya tapi itu mengasumsikan bahwa ada beberapa kolom dengan nama yang sama. R memungkinkan, tapi saya mencoba menghindari menggunakan fitur ini.
mpiktas
@mpiktas Rupanya begitu OP, jadi pertanyaan ini.
@ MBB terima kasih telah menjelaskan kebingungan dengan nama (mydat) [c (name)] Karena OP telah menulis, saya tahu bahwa kolom / nama variabel "nama" saya seperti "wow itu mungkin?" dan mencoba mengakses nama dengan nama ... membodohiku;). Bolehkah saya dengan rendah hati menyarankan untuk mengedit pertanyaan?
steffen
5

Saya memiliki masalah yang sama dan saya menyelesaikannya dengan kode ini:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
cuong
sumber