2016-09-29 2 views
3

Ich habe einen Datenrahmen (df) wie diesein R, wie ein Wert einer Spalte auf mehrere Spalten in dem gleichen Datenrahmen anzuwenden

n g count s_a s_b s_c ..... 
T1 gb 10000 0 1 0 
T1 ga,gb 15000 1 1 0 

Und ich bei den Werten in S_A sah ... S_n zu sehen, welche die höchste n

top_n <- names(sort(colSums(df[4:ncol(df]), decreasing=TRUE))[1:n] 

Werte von top_n Spaltennamen, die colsum (colname) in der oberen N

hat ich die Ergebnisse top_n verwenden möchten jede Spalte zu aktualisieren, deren name = top_n mit dem Wert in der Spaltenanzahl

n g count s_a s_b s_c ..... 
T1 gb 10000 0  10000 0 
T1 ga,gb 15000 15000 15000 0 
+4

'df [, -1: -3] <- df $ zählen * df [, -1: -3]' – alistaire

Antwort

0

Wir können lapply zur Schleife über die Spalte von Interesse (4:ncol(df)) verwenden, multiplizieren sie mit dem ‚count‘ und dem Ausgang zurück zu den ursprünglichen Spalten zuweisen.

df[4:ncol(df)] <- lapply(df[4:ncol(df)], `*`, df$count) 

oder Map, können wir das gleiche tun, indem die entsprechenden Elemente

Multiplikation
df[4:ncol(df)] <- Map(`*`, df[4*ncol(df)], list(df$count)) 

Mit data.table v1.9.7, können wir einen lapply basiertes Verfahren (ähnlich dem ersten Verfahren base R) tun. Konvertieren Sie 'data.frame' in 'data.table' (setDT(df)), geben Sie die interessierenden Spalten in .SDcols an, durchlaufen Sie die Spalten, multiplizieren Sie mit 'count' und weisen Sie die Ausgabe den ursprünglichen Spalten zu (:=).

library(data.table) 
setDT(df)[, (4:ncol(df)) := lapply(.SD, `*`, count), .SDcols = 4:ncol(df)] 
Verwandte Themen