(R):按唯一行值统一计算分位数

时间:2017-04-20 17:07:22

标签: r aggregate quantile unification

我有这样的df:

> df<-data.frame(Client.code = 
c(100451,100451,100523,100523,100523,100525),dayref = c(24,30,15,13,17,5))
> df
    Client.code dayref
1      100451     24
2      100451     30
3      100523     15
4      100523     13
5      100523     17
6      100525      5

这是一个为期一年的付款期限分配。

将上述数据存储在上面并给出如下df2:

   Client.Code    Days
1  100451          16
1  100523          16
1  100460          35

因为我有足够的数据用于合理的分位数概率。我想知道如何构建一个循环,用于根据第一个df为这个df2天中的每一行分配一个分位数。

2 个答案:

答案 0 :(得分:0)

我们可以使用data.table

library(data.table)
setDT(df)[, .(Quantile = quantile(dayref)), Client.code]

tidyverse

library(dplyr)
library(tidyr)
df %>% 
   group_by(Client.code) %>%
   summarise(Quantile = list(quantile(dayref))) %>%
   unnest

答案 1 :(得分:0)

tapply(df$dayref, df$Client.code, quantile)

您可以通过添加它们的矢量来指定特定百分位数

tapply(df$dayref, df$Client.code, quantile, 1:19/20)

您可能需要像这样制定

tapply(df$dayref, df$Client.code, quantile, probs = 1:19/20)

如果你有NAs

,你可以添加na.rm = TRUE作为另一个参数