(R):通过唯一行值统一计算分位数
(R): Calculate quantile by unique row value 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
因为我有足够的数据来计算合理的分位数概率。 calculations.I 想知道如何构建一个循环,以根据第一个 df 为天数 df2 中的每一行分配一个分位数。
我们可以使用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
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 作为另一个参数
我有一个这样的 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
因为我有足够的数据来计算合理的分位数概率。 calculations.I 想知道如何构建一个循环,以根据第一个 df 为天数 df2 中的每一行分配一个分位数。
我们可以使用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
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 作为另一个参数