2016-12-21 1 views
3

Ich habe einen Datenrahmen:Verwenden Sie die Funktion in groupby mit variabler Spaltennamen in R mit dplyr

df <- data.frame(Category = c(rep("A", 3), rep("B", 3)), Value = rnorm(6)) 
df 
Category  Value 
1  A -0.94968814 
2  A 2.56687061 
3  A -0.15665153 
4  B -0.47647105 
5  B 0.83015076 
6  B -0.03744522 

Jetzt möchte ich eine weitere Spalte hinzuzufügen, die die mittlere pro Kategorie ist. Dies kann mit dem dplyr Paket einfach erfolgen:

df %>% group_by(Category) %>% 
    summarize(mean = mean(Value)) 

nun in Stück Code ist mein Problem: Ich kann nicht mean(Value) verwenden kann, aber ich habe einen Variablennamen, der den Spaltennamen kennt: columnName = "Value" Aber diese leider wird nicht funktionieren:

columnName = "Value" 

df %>% group_by(Category) %>% 
    summarize(mean = mean(columnName)) 

Warnmeldungen: 1: In mean.default ("Value"): Argument nicht numerisch oder logisch ist: Rückkehr NA 2: In mean.default ("Value"):
Argument ist nicht numerisch oder logisch: NA

Wie Rückkehr kann ich den Namen der Spalte mit der Variablen übergeben?

+0

'Mittel verwenden (df [, Spaltenname])' dieser Code für mich gearbeitet, wenn die gleichen Variablen wie Sie. –

+1

Nein, das funktioniert nicht. Es muss der Mittelwert der Gruppen sein, nicht der Mittelwert der Spalte. – user2874583

+0

Es verwendet nicht das Paket 'dplyr', aber es funktioniert wie folgt:' tapply (df [, columnName], df $ Category, mean) ' –

Antwort

2

Wir get mit aggregate

aggregate(get(columnName)~Category, df, mean) 

# Category get(columnName) 
#1  A  -0.5490751 
#2  B  -0.2594670 
+1

Das funktioniert dank! Aber ich suchte nach einer Lösung im dplyr-Paket. Weißt du, ob das auch möglich ist? – user2874583

Verwandte Themen