我有这样的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天中的每一行分配一个分位数。
答案 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作为另一个参数