Aquí hago una nueva columna para indicar si myData está por encima o por debajo de su media fina¿Cómo hacer divisiones medianas dentro de los niveles de los factores en 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
Works. Ahora quiero hacer lo mismo, pero calculo las divisiones medianas dentro de cada nivel de myFactor.
Yo he llegado con esto:
#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 contiene lo que quiero. Clasifica cada elemento de los factores A, B y C correctamente. Sin embargo, me gustaría crear una nueva columna, myDataFrame $ FactorLevelMedianSplit, que muestre la división mediana recientemente calculada.
¿Cómo se convierte la salida del comando "por" en una útil columna de marco de datos?
creo que quizás el "por" comando no es R-como forma de hacer esto ...
actualización:
Con ejemplo de cómo utilizar los factores (Thierry) inteligentemente, y sobre descubriendo la función "ave" en el libro de Spector, encontré esta solución, que no requiere paquetes adicionales.
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 solución sin paquete es hermosa, ¡gracias! – Amyunimus