Как сделать срединное расщепление в пределах уровней факторов в R?

Здесь я делаю новый столбец, чтобы указать, является ли myData выше или ниже его медианы

### 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

Работает отлично. Теперь я хочу сделать то же самое, но вычислить медианные разбиения на каждом уровне myFactor.

Я придумал это:

#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 содержит то, что я хочу. Он правильно классифицирует каждый элемент факторов A, B и C. Однако я хотел бы создать новый столбец myDataFrame $ FactorLevelMedianSplit, который показывает только что вычисленное медианное разбиение.

Как преобразовать вывод & quot; по & quot; Команда в полезный столбец данных кадра?

Я думаю, что, возможно, "по" команда не R-как способ сделать это ...

Update:

На примере Тьерри о том, как грамотно использовать factor (), и при обнаружении "ave" Функция в книге Spector, я нашел это решение, которое не требует дополнительных пакетов.

myDataFrame$MediansByFactor=ave(
    myDataFrame$myData,
    myDataFrame$myFactor,
    FUN=median)

myDataFrame$FactorLevelMedianSplit = factor(
    myDataFrame$myData>myDataFrame$MediansByFactor, 
    levels = c(TRUE, FALSE), 
    labels = c("Above", "Below"))

Ответы на вопрос(2)

Ваш ответ на вопрос