Qui faccio una nuova colonna per indicare se myData è al di sopra o al di sotto la sua medianaCome si fa la divisione mediana all'interno dei livelli di fattore in 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
funziona bene. Ora voglio fare la stessa cosa, ma calcolare le divisioni mediane all'interno di ciascun livello di myFactor.
mi è venuta in mente questo:
#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 quello che voglio. Classifica in modo corretto ogni elemento dei fattori A, B e C. Tuttavia mi piacerebbe creare una nuova colonna, myDataFrame $ FactorLevelMedianSplit, che mostra la divisione mediana appena calcolata.
Come si converte l'output del comando "by" in un'utile colonna di dati frame?
Penso che forse il "di" comando non è R-come modo per fare questo ...
Aggiornamento:
Con l'esempio di Thierry di come utilizzare il fattore() abilmente, e su scoprendo la funzione "ave" nel libro di Spector, ho trovato questa soluzione, che non richiede pacchetti aggiuntivi.
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 soluzione packageless per questo è bello - grazie! – Amyunimus