Ici je fais une nouvelle colonne pour indiquer si myData est au-dessus ou en dessous de sa médianeComment faire des divisions médianes dans les niveaux de facteur dans R?
### MedianSplits based on Whole Data
#create some test data
myDataFrame=data.frame(myData=runif(15),myFactor=rep(c("A","B","C"),5))
#create column showing median split
myBreaks= quantile(myDataFrame$myData,c(0,.5,1))
myDataFrame$MedianSplitWholeData = cut(
myDataFrame$myData,
breaks=myBreaks,
include.lowest=TRUE,
labels=c("Below","Above"))
#Check if it's correct
myDataFrame$AboveWholeMedian = myDataFrame$myData > median(myDataFrame$myData)
myDataFrame
fonctionne très bien. Maintenant, je veux faire la même chose, mais calculer les divisions médianes dans chaque niveau de myFactor.
Je suis venu avec ceci:
#Median splits within factor levels
byOutput=by(myDataFrame$myData,myDataFrame$myFactor, function (x) {
myBreaks= quantile(x,c(0,.5,1))
MedianSplitByGroup=cut(x,
breaks=myBreaks,
include.lowest=TRUE,
labels=c("Below","Above"))
MedianSplitByGroup
})
byOutput contient ce que je veux. Il catégorise correctement chaque élément des facteurs A, B et C. Cependant, j'aimerais créer une nouvelle colonne, myDataFrame $ FactorLevelMedianSplit, qui affiche la division médiane nouvellement calculée. Comment convertir la sortie de la commande "by" en une colonne de trame de données utile?
Je pense que peut-être le « par » commande n'est pas R comme façon de le faire ...
Mise à jour:
Avec Thierry de l'exemple de la façon d'utiliser le facteur() intelligemment, et sur En découvrant la fonction "ave" dans le livre de Spector, j'ai trouvé cette solution, qui ne nécessite aucun paquet supplémentaire.
myDataFrame$MediansByFactor=ave(
myDataFrame$myData,
myDataFrame$myFactor,
FUN=median)
myDataFrame$FactorLevelMedianSplit = factor(
myDataFrame$myData>myDataFrame$MediansByFactor,
levels = c(TRUE, FALSE),
labels = c("Above", "Below"))
La solution sans emballage est belle - merci! – Amyunimus