2016-05-09 9 views
1

Ich habe einen Datenrahmen mit mehreren Spalten. Ich möchte eine Funktion/Schleife erstellen oder was effizienter sein könnte, um den Datenrahmen zu nehmen, eine Spalte zu sortieren, einen Variablenrang (mit einem Namen wie rank_Spaltenname) basierend auf dieser Reihenfolge zu erstellen und ihn dem Datenrahmen hinzuzufügen.Der effizienteste Weg, Spalten zu sortieren und Rangvariablen zu erstellen

dat <- data.frame(indi1=rnorm(10),indi2=rnorm(10)) 

dat1 <- dat[order(dat$indi1), ] 
dat1$rank_indi <- 1:nrow(dat) 
dat2 <- dat1[order(dat1$indi2), ] 
dat2$rank_indi2 <- 1:nrow(dat2) 

Dieses Beispiel macht, was ich will, aber in einer umständlichen Weise. Ich habe versucht, lapply zu verwenden, aber ich kann nicht scheinen, den Datenrahmen mit einer neuen Spalte mit einem ähnlichen Namen zu aktualisieren.

Jede Hilfe wird geschätzt.

+0

Sie können Ihren Code 'SDAT $ rank_indi Jimbou

+0

Auch etwas wie 'Bibliothek (dplyr); dat%>% mutate_each (Spaß (dose_rank)) ' –

Antwort

4

Hier ist eine einfache Schleife in "rank_indi" Variablen einfügen:

for(i in names(dat)){ 
    dat[order(dat[,i]),paste0("rank_", i)] <- 1:nrow(dat) 
} 


dat 
     indi1  indi2 rank_indi1 rank_indi2 
1 1.45829065 -0.3322692   10   2 
2 0.55972129 2.5031318   7   10 
3 0.45870293 -0.6216859   6   1 
4 1.03814922 1.4284271   9   8 
5 -0.75211259 0.5600499   3   4 
6 -1.89298552 0.8047825   2   6 
7 0.03843679 0.6593377   5   5 
8 -0.09808913 0.2513729   4   3 
9 0.97862797 2.2650003   8   9 
10 -2.07767889 1.0684134   1   7 

edit: habe einen Fehler in der früheren Code

Verwandte Themen