聚合连续变量

时间:2018-02-15 15:32:43

标签: r dataframe

我们说我在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百分位,依此类推。

我该怎么做?

2 个答案:

答案 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"]))