10
votes

Comment faire des séparations médianes dans les niveaux de facteur dans R?

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"))


1 commentaires

La solution sans emballage à cela est belle - merci!


3 Réponses :


1
votes

Voici une voie de hack-ish. Hadley peut venir avec quelque chose de plus élégant:

Pour commencer, nous concatéons simplement le par code> sortie: p> xxx pré>

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> xxx pré>

que nous pouvons ensuite attribuer dans le data.frame Vous vouliez modifier: P>

R> myDataFrame$FactorLevelMedianSplit <- 
      as.factor(c("Below","Above")[do.call(c,byOutput)])


0 commentaires

4
votes

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
})


1 commentaires

Cela a fonctionné bien. Voir aussi la mise à jour du message pour une manière sans réussite.



0
votes

Vous ne cherchez pas quelque chose comme ça, étiez-vous?

Course$grade2 <- ifelse(Course$grade >= median(Course$grade), 1, 0)


0 commentaires