2017-06-14 14 views
0

Ich habe einen Datenrahmen wie untenWie ist für jede Spalte erstellen automatisch

date   A B ... Z  
2014-12-01  22 33 ... 44 
2014-12-02  33 44 ... 55 
. 
. 
2014-12-30  65 75 ... 85 

Ich bin für jede Spalte mit folgendem Code

df$A_Bin<-cut(df$A, breaks = c(0, seq(1, 1000, by = 5)), labels = 0:199)  
df$B_Bin<-cut(df$B, breaks = c(0, seq(1, 1000, by = 5)), labels = 0:199) 

Wie

oben Code automaten berechnen
o/p 
date   A B ... Z A_Bin B_bin ... Z_Bin 
2014-12-01  22 33 ... 44 5  7  ... 9 
2014-12-02  33 44 ... 55 7  9  ... 11 
. 
. 

Vielen Dank im Voraus

Antwort

0

Wir lapply von base R

df[paste0(names(df)[-1], "_Bin")] <- lapply(df[-1], cut, 
      breaks = c(0, seq(1, 1000, by = 5), labels = 0:199) 
1

Sie können eine Funktion schreiben, die einen einzelnen Vektor bins:

myBins <- function(x) cut(x, breaks = c(0, seq(1, 1000, by = 5)), labels = 0:199) 

Dann ist es zu Spalten Ihrer Datenrahmen gelten, mit Ausnahme der Spalte 1:

binned <- sapply(df[,-1], myBins) 

Namen es Spalten:

colnames(binned) <- paste0(LETTERS, "_Bin") 

Und füge Ergebnis original df:

newdf <- cbind(df, binned) 
+0

nach dem Ausführen COLNAMES verwenden (binned) sind immer Fehler bei dimnames (x) <- dn: Länge von 'dimnames' [2] nicht in gleichem Maße zu Array .. Danke – snr999

+0

Vielleicht sind die Spalten Ihres ursprünglichen df nicht mit allen Buchstaben (A bis Z) benannt? –

+0

ja, ich tippte einfach col-names als Beispiel – snr999

Verwandte Themen