C'est peut-être simple mais je ne trouve pas de réponse sur le Web. J'ai un problème avec le calcul de la moyenne par facteurs par niveau . Mes données sont typiques:
factor, value
a,1
a,2
b,1
b,1
b,1
c,1
Je veux obtenir le vecteur A ne contient la moyenne que pour le niveau "a" Si je tape A sur la console, je veux obtenir 1,5 Et cette méthode de calcul de la moyenne doit utiliser des facteurs.
Merci d'avance pour l'aide.
Juste pour le plaisir de poster la solution data.table
même si vous devriez probablement faire ce que @lukeA a suggéré
library(data.table)
A <- setDT(df[df$factor == "a", ])[, mean(value)]
## [1] 1.5
jetez un oeil à tapply
, qui vous permet de décomposer un vecteur en fonction d'un facteur et d'appliquer une fonction à chaque sous-ensemble
> dat<-data.frame(factor=sample(c("a","b","c"), 10, T), value=rnorm(10))
> r1<-with(dat, tapply(value, factor, mean))
> r1
a b c
0.3877001 -0.4079463 -1.0837449
> r1[["a"]]
[1] 0.3877001
Vous pouvez accéder à vos résultats en utilisant r1[["a"]]
etc.
Alternativement, l’un des packages R populaires (plyr
) a de très jolies façons de le faire.
> library(plyr)
> r2<-ddply(dat, .(factor), summarize, mean=mean(value))
> r2
factor mean
1 a 0.3877001
2 b -0.4079463
3 c -1.0837449
> subset(r2,factor=="a",select="mean")
mean
1 0.3877001
Vous pouvez également utiliser dlply
à la place (qui prend un cadre de données et renvoie une liste à la place)
> dlply(dat, .(factor), summarize, mean=mean(value))$a
mean
1 0.3877001
Le code suivant demande la moyenne de la valeur lorsque facteur = a:
mean(data$value[data$factor == "a"])
Une autre possibilité simple serait la fonction "par":
by(value, factor, mean)
Vous pouvez obtenir la moyenne du niveau de facteur "a" par:
factor_means <- by(value, factor, mean)
factor_means[attr(factor_means, "dimnames")$factor=="a"]