我们说我在R中有以下数据框:
d <- read.table(text='Name Month Rate1 Rate2
Aira 1 12 23
Aira 2 18 73
Aira 3 19 45
Ben 1 53 19
Ben 2 22 87
Ben 3 19 45
Cat 1 22 87
Cat 2 67 43
Cat 3 45 32', header=TRUE)
我想计算Rate1的每个四分位数的Rate2的平均值。例如,Rate1的第0百分位数到第25百分位数的Rate2的平均值是什么,Rate1的第26到第50百分位,依此类推。
我该怎么做?
答案 0 :(得分:2)
您可以使用cut
查找四分位数并进行汇总,以便汇总或使用ave
来创建列,具体取决于您希望输出的方式(感谢@akrun的评论) )
aggregate(Rate2 ~ cut(Rate1, breaks = quantile(Rate1), include.lowest = TRUE), d, mean)
#or
with(d, ave(Rate2, cut(Rate1, breaks = quantile(Rate1), include.lowest = TRUE), FUN = mean))
答案 1 :(得分:1)
如何找到你想要的分位数中的变量,然后计算那些变量的平均值,如下所示:
q_use = list(c(0,0.25),c(0.26,0.5),c(0.51,0.75),c(0.76,1))
pos_use = lapply(1:length(q_use), function(x) quantile(d$Rate1,q_use[[x]]))
average_q = lapply(1:length(q_use), function(x)
mean(d[which(d$Rate1>=pos_use[[x]][1] & d$Rate1<=pos_use[[x]][2]),"Rate2"]))