2016-03-18 10 views
0

Ich habe einen Datenrahmen, jede Spalte ist eine kategorische Variable und eine Spalte namens Ziel mit Wert 0 oder 1. Ich versuche, einen Datenrahmen nach Spalten zu durchlaufen und zu berechnen das mittlere Ziel durch unterschiedliche Höhe jeder Spalte.Schleife über Datenrahmenspalte nach Namen in R

n = c(2, 2, 1) 
s = c(1, 0, 1) 
b = c(TRUE, FALSE, TRUE) 
target = c(1,0,0) 
df = data.frame(n, s,b,target) 

for(i in 1:a){ 
    aggregate(df$target ~ as.name(colnames(df)[1]), df, mean) 
} 

Es scheint, hier kann ich nicht einfach ersetzen n in

aggregate(df$target ~ n, df, mean) 

mit String. Wie löst man diese Art von Problemen? Vielen Dank.

+0

Sie sollten eine Formel aggregieren (Ziel ~ n, Daten = df, FUN = Mittelwert) '. Sie können einen Aufruf unter Verwendung von beispielsweise "sprintf", z. 'as.formula (sprintf (" Ziel ~% s ", Spaltennamen (df) [i]))'. –

+0

'lapply (df [, - 4], Funktion (x) {Aggregat (Ziel ~ x, Daten = df, FUN = Mittelwert)})'? – alistaire

+0

Benötigen Sie mehrere aggregierte dfs oder laufende/bedingte Mittelwerte? Bitte illustrieren Sie mit den gewünschten Ergebnissen. – Parfait

Antwort

0

Vielen Dank an Roman Luštriks Kommentar.

Der Code ist,

for(i in 1:a){ 
col_formula <- as.formula(sprintf("target ~ %s", colnames(df)[i])) 
aggregate(col_formula, data=df, FUN=mean) 
} 

Es gibt das Ergebnis, das ich suchte.