我有以下 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
.......
有一种复杂的方法可以通过每个组的循环和剪切函数来完成此操作,但它根本效率不高。有人知道更好的解决方案吗?
Thanks !
In 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)