R'deki veri çerçevesinde sütun adları nasıl değiştirilir? [kapalı]


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

Bundan, veri çerçevesi mydat sütun / değişken adı "adı" yerine "yeni ad" biliyorum.

Benim sorum şu, ben bir döngü ile bunu yapmak istiyorum ki ben gibi bir şey olacak:

newname1 newname2 newname3 newname4 ve benzeri, nasıl yaparım?

Bu işe yaradı ve işe yaramadı:

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

Bunu kodlamanın bir yolu var mı? yardım edebilecek herkese çok teşekkürler. Owusu Isaac


4
Bu soru konu dışı gibi görünüyor çünkü sadece programlama ile ilgili.
gung - Monica'yı eski durumuna döndürün

Bazı çirkin değişken adlarını yeniden adlandırmanız gerekiyorsa (örn. Abcde_1_1, abcde_2_2, abcde_3_3 ...) Qualtrics'ten indirilen bazı veri kümelerinde sık sık olduğu gibi:ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
JetLag

Yanıtlar:


10

En belirgin çözüm, döngü için kodunuzu aşağıdakilerle değiştirmek olacaktır:

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

Ancak değişkeninizin ne olduğunu açıklığa kavuşturmanız gerekir name. Şu anda bu döngü tek sütunun 4 yeniden adlandırmasını yapacak.

Genel olarak değiştirmek istediğiniz isimler vektördeyse, bu standart bir alt ayar prosedürüdür:

 names(mydat)[names(mydat)%in% names_to_be_changed] <- name_changes

Merhaba Mpiktas, çözümünüz mükemmel çalışıyor. çok teşekkürler. ve herkese teşekkürler
Oğul

1
@Owusu, bu sitedeki şükran ifadesi cevapları ve kabullerini destekliyor. SSS bölümüne bakın . Her iki durumda da, yardımcı olmaktan mutluluk.
mpiktas

6

sprintfYa da şunu kullanmayı deneyin paste:

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

Ayrıca, names(mydat)[c(name)]daha az bir saçmalık olduğunu unutmayın ; c(name)sadece yazmaya eşdeğerdir nameve "denilen değişkenin değerini al" anlamına gelir name; köşeli parantez en azından öğelerini ayıklayacaktır, names(mydat)ancak namedeğişken yalnızca sayısal veya boole dizin içeriyorsa .

Aradığınız sütunları değiştirmek istiyorsanız nameile name1, name2, ..., nameN, böyle bir şey kullanın:

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

DÜZENLEME: Eh, sadece çoğaltılan sütun adlarını kaldırmak istiyorsanız, daha da kolay bir yol var; R'nin make.namesbu sorunu çözen bir işlevi vardır; şu şekilde kullanılabilir:

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

Daha da kısa, aynı şey sadece yazı ile elde edilebilir:

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

@mbq, == dizeler için kısmi eşleme yapıyor mu?
mpiktas

@mpiktas Hayır, ancak burada yalnızca tam eşleme gerekiyor. grepldaha genel bir iş yapmak için sorun olmaz.

@mbq, evet, ancak bu aynı ada sahip birden çok sütun olduğunu varsayar. R buna izin veriyor, ancak bu özelliği kullanmaktan kaçınmaya çalışıyorum.
mpiktas

@mpiktas Görünüşe göre OP, dolayısıyla bu soru.

@mbq isimlerle karışıklığı açıkladığınız için teşekkürler (mydat) [c (name)] OP yazdığından beri "name" sütununun / değişken adının "wow mümkün mü?" ve isimlere isimle erişmeye çalıştı ... aptal beni;). Soruyu alçakgönüllü bir şekilde düzenlemeyi önerebilir miyim?
steffen

5

Ben de aynı sorunu vardı ve ben bu kod ile çözüldü:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.