2016-03-21 55 views
-1

Bir referans tablosu kullanarak, bazı önemli alanları (diğer sütunları) koruyarak satırları birkaç sütuntan yeniden konumlandırmak için izlerim.R döngü için döngü

Name Amplitude Value Code   
M2  3.264   29.0 A  
S2  0.781   51.9 A  
N2  0.63   12.3 A  
K1  1.263  136.8 A  
M4  0.043  286.0 B 
M2  3.264  28.98 B 
S2  0.781   30.0 B 
N2  0.63   15.04 B 
K1  1.263  57.96 B 

İlk tabloda A Genlik den fazla sütuna sahip Bu sadece bir örnektir:

Name Amplitude A   B   
M2  3.264   29.0  28.98 
S2  0.781   51.9  30.0 
N2  0.63   12.3  28.43 
K1  1.263  136.8  15.04 
M4  0.043  286.0  57.96 

Böyle bir nihai sonuçlar aldık.

Final<-NULL 

colname<-colnames(ReferenceAll) 

for (i in (1:nrow(ReferenceAll))){ 
    for (j in (1:ncol(ReferenceAll))){ 
    if (j>2) { # the number is from the column I want to get in the results 

    temp<-as.data.frame(rbind(cbind(Name=ReferenceAll[i,1], 
            Amplitude=as.character.factor(ReferenceAll[i,2]), 
            Value=ReferenceAll[i,j], 
            Code=colname[j]))) 
    Final<-rbind(Final,temp)}}} 

Ben birkaç satır olduğunda o miliseconds alır ama 100'den fazla satır varsa o saat sürer: Ben aşağıdaki kodu kullanabilirsiniz. Biri bana yardım edebilir mi?

+2

'kitaplığı (reshape2); eriyik (df1, id.vars = C ("adı", "genlik"), value.name = "değer", variable.name = "Kod") ' – RHertel

+1

baz R: 'yeniden şekillendir (df, değişken = c ("A", "B"), yön = "uzun", v.names = c ("Değer"), times = c ("A", "B")) ' – Zelazny7

cevap

3

data.table'dan melt'u kullanabiliriz. for döngüsüne göre hızlı olmalıdır.

library(data.table) 
melt(setDT(df1), id.var=1:2, value.name="Value", variable.name="Code")