Ici, je fais une nouvelle colonne pour indiquer si MyData est au-dessus ou au-dessous de sa médiane
myDataFrame$MediansByFactor=ave(
myDataFrame$myData,
myDataFrame$myFactor,
FUN=median)
myDataFrame$FactorLevelMedianSplit = factor(
myDataFrame$myData>myDataFrame$MediansByFactor,
levels = c(TRUE, FALSE),
labels = c("Above", "Below"))
3 Réponses :
Voici une voie de hack-ish. Hadley peut venir avec quelque chose de plus élégant:
Pour commencer, nous concatéons simplement le et ce qui compte que nous obtenons le Les niveaux de facteur 1 et 2 ici que nous pouvons utiliser pour ré-indexer un nouveau facteur avec ces niveaux: p> que nous pouvons ensuite attribuer dans le par code> sortie: p> data.frame Vous vouliez modifier: P> R> myDataFrame$FactorLevelMedianSplit <-
as.factor(c("Below","Above")[do.call(c,byOutput)])
Voici une solution utilisant le paquet Plyr.
myDataFrame <- data.frame(myData=runif(15),myFactor=rep(c("A","B","C"),5))
library(plyr)
ddply(myDataFrame, "myFactor", function(x){
x$Median <- median(x$myData)
x$FactorLevelMedianSplit <- factor(x$myData <= x$Median, levels = c(TRUE, FALSE), labels = c("Below", "Above"))
x
})
Cela a fonctionné bien. Voir aussi la mise à jour du message pour une manière sans réussite.
Vous ne cherchez pas quelque chose comme ça, étiez-vous?
Course$grade2 <- ifelse(Course$grade >= median(Course$grade), 1, 0)
La solution sans emballage à cela est belle - merci!