2013-01-14 18 views
5

R ile ilgili en sinir bozucu şeylerden biri, algoritma ve sezgisel olarak adlar kullanarak yeni veri ağı değişkenleri oluşturmanın zorluğudur.Döngü ve adlandırma kuralı kullanarak veri çerçevesinde yeni adlandırılmış değişken oluşturma

Farz edelim ki, bazı değişkenlere sahip bir veri çerçevem ​​var ve bir döngüde onlara dayalı yeni değişkenler oluşturmak istiyorum. Örneğin, ben mevcut değişkenlerin kümülatif toplamı olan yeni değişkenler oluşturmak istiyor ve ben eserlerini buldum yok permuation df$var_cumul

temp<-as.data.frame(cbind(seq(0:10),seq(10:20))) 
names(temp)<-c("x","y") 
for (i in 1:ncol(temp)) { 
    vname<-names(temp)[i] 
    assign(paste("temp$",vname,"_cumul",sep=""),cumsum(contrs[,i])) 
} 

adını verdi. Bu muhtemelen düzenli olarak R ile en büyük sorunumdan biridir.

Bunu yapmanın kolay ve sezgisel bir yolu var mı?

+2

Sen "[[" daha dikkatli yardım sayfasına çalışmam gerekiyor. Anahtar, '$ <- 'yapamayacağı bir şey yapmak için boş bir çabadan kaçınmaktır. Ayrıca "as.data.frame (cbind (...))' –

+1

'un iğrençliğini de öğrenmediyseniz de yardımcı olacaktır. Ayrıca asla 1: ncol', '1: nrow' veya' 1: length' kullanmayın. .. (yaptığını düşündüğün şeyi yapmaz ve bu tür vakalar hata ayıklaması ...) - 'seq_len()' ve bunun yerine arkadaşlarını kullanmak istersiniz. –

+0

DWIN'in ikinci noktası ile, “data.frame (x = 1:11, y = 1:11)” nin (diğer şeylerin yanı sıra) çok daha az yazdığı gerçeğine atıfta bulunduğuna inanıyorum. Ciddi bir şekilde seq (10:20) gibi şeylerin çıktısı ile oynamanızı tavsiye ederim çünkü bu da oldukça korkunç. ('' Seq '' yi okumak iyi bir başlangıç ​​olur.) – joran

cevap

5

Evet, [[ operatör:

temp <- data.frame(x = 0:10, y = 10:20) 

for (n in names(temp)) 
    temp[[paste0(n, "_cumsum")]] <- cumsum(temp[[n]]) 
+0

3 veri çerçevesi oluşturmak istiyorsam bunu bir for döngüsünde oluşturabilir miyim? Benim durumum içindir (i: 1: 3) { df.i <- data.frame (bir şey) } –

İlgili konular