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!