2016-11-20 1 views
-1

Ich habe einen Datenrahmen, wo "verdienen" ist numerisch und A, B, C, D, E ... sind binäre Vektor.R ordnen Spalten nach colSums und bin mehrere Spalten unter der gleichen Kategorie

Earning A B C D E ...**1000 such binary vector columns** 
    21 1 0 0 1 1 
    45 0 0 0 1 1 
    67 0 0 0 1 1 
    23 0 0 0 0 1 
    44 0 0 0 1 1 
    77 1 1 0 0 1 
    89 0 1 0 1 1 
    90 1 0 0 0 0 

Unter den A, B, C .... 1000columns, möchte ich die Top-400 Spalten, deren colSums ist die größte behalten. Für die anderen 600 Spalten möchte ich sie als eine Spalte markieren, die als "Andere" markiert ist, die eine 0 oder 1 haben würde (im Grunde ist jeder Zeileneintrag in der Spalte "Andere" ein ODER zwischen den Spalten der letzten Spalte 600).

Insgesamt besteht die Absicht darin, die populärsten Top-400-Spalten unter A, B, C, D, E ... zu verwenden (wo Popularität als '1' im binären Vektor gemessen wird) lineare Regression zu verdienen.

Antwort

0

Angenommen, dfs ist data.frame mit Ihren Daten.

# +1/-1 is to keep 'Earnings' at the beginning of the data.frame 
new_order = order(colSums(dfs[,-1], na.rm = TRUE), decreasing = TRUE) + 1 
res = cbind(
    dfs[, c(1, new_order[1:400])], 
    other = 1*(rowSums(dfs[, new_order[-(1:400)]])>0) 
    ) 

res ist resultierende data.frame mit neuer Reihenfolge der Spalten.

Verwandte Themen