R按分配的组分组

时间:2016-02-17 10:24:14

标签: r quantile tapply

我有以下df:

group = rep(seq(1,3),30)
variable = runif(90, 5.0, 7.5)
df = data.frame(group,variable)

我需要i)按组定义分位数,ii)将每个人分配给她的分组。

因此,输出看起来像:

id    group  variable  quantile_with_respect_to_the_group
1      1      6.430002     1
2      2      6.198008     3
          .......

有一种复杂的方法可以在每个组中使用循环和剪切功能,但它根本没有效率。有人知道更好的解决方案吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

data.table

library(data.table)

setDT(df)[,quantile := cut(variable, quantile(variable, probs = 0:4/4),
                         labels = FALSE, include.lowest = TRUE), by = group]

>head(df)
#    group variable quantile
# 1:     1 6.103909        2
# 2:     2 6.511485        3
# 3:     3 5.091684        1
# 4:     1 6.966461        4
# 5:     2 6.613441        4

答案 1 :(得分:1)

dplyr/findInterval

的另一个版本
library(dplyr)
df %>%
  group_by(group) %>% 
  mutate(Quantile = findInterval(variable, 
                quantile(variable, probs=0:4/4)))