gpt4 book ai didi

r - 如何在 R 中的因子水平内进行中值分割?

转载 作者:行者123 更新时间:2023-12-02 08:28:10 24 4
gpt4 key购买 nike

这里我创建一个新列来指示 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,它显示新计算的中值分割。

如何将“by”命令的输出转换为有用的数据框列?

我认为“by”命令可能不是类似 R 的方式来执行此操作...

更新:

通过 Thierry 的如何巧妙使用 Factor() 的示例,以及在 Spector 的书中发现“ave”函数,我找到了这个解决方案,它不需要额外的包。

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

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

最佳答案

这是使用 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
})

关于r - 如何在 R 中的因子水平内进行中值分割?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1259867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com