Tutaj robię nową kolumnę, aby wskazać, czy Mydata jest powyżej lub poniżej medianyJak wykonać medianę podziału na poziomy czynników w 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
działa dobrze. Teraz chcę zrobić to samo, ale oblicz medianę podziału na każdym poziomie myFactor.
mam wymyślić to:
#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 zawiera to, co chcę. Kategoryzuje on prawidłowo każdy element czynników A, B i C. Jednak chciałbym utworzyć nową kolumnę, myDataFrame $ FactorLevelMedianSplit, która pokazuje nowo obliczony medianowy podział.
Jak przekonwertować dane wyjściowe polecenia "by" do użytecznej kolumny danych?
myślę, być może "na" polecenie nie jest R-podobny sposób to zrobić ...
Aktualizacja:
Z przykład Thierry jak używać współczynnika() sprytnie i po odkrywając funkcję "ave" w książce Spectora, znalazłem to rozwiązanie, które nie wymaga żadnych dodatkowych pakietów.
myDataFrame$MediansByFactor=ave(
myDataFrame$myData,
myDataFrame$myFactor,
FUN=median)
myDataFrame$FactorLevelMedianSplit = factor(
myDataFrame$myData>myDataFrame$MediansByFactor,
levels = c(TRUE, FALSE),
labels = c("Above", "Below"))
Opakowanie bez opakowania jest piękne - dzięki! – Amyunimus