R:如何在组内创建四分位列

时间:2014-11-14 16:51:01

标签: r quantile

我已经成功创建了专栏" qaurtile"使用以下代码,但我也想创建一个名为" quartile_team"的列。这显示了每个团队中的四分位数。我无法弄清楚如何做到这一点。

感谢帮助,

# generate dataset
teams <- c(rep("East", 6), rep("West", 8), rep("North", 7), rep("South", 9))
time_spent <- rnorm(30)
dataset <- as.data.frame(cbind(teams, time_spent))
dataset$time_spent <- as.numeric(dataset$time_spent)

# create quartile column
 dataset <- within(dataset,
                    quartile <- cut(x = time_spent,
                                    breaks = quantile(time_spent, probs = seq(0, 1, 0.25)),
                                    labels = FALSE,
                                    include.lowest = TRUE))

1 个答案:

答案 0 :(得分:2)

有更好的方法可以做到这一点,但快速而肮脏的解决方案可能会使用plyr。我将使用你的函数计算其中的四分位数:

library(plyr)


ddply(dataset, "teams", function(team){

  team_quartile <- cut(x = team$time_spent, breaks = quantile(team$time_spent, probs = seq(0, 1, 0.25)),
                       labels = FALSE,
                       include.lowest = TRUE)

  data.frame(team, team_quartile)
})

基本上,您希望由团队分割数据框,然后对数据框的每个子集执行计算。您也可以使用tapply。