在多个因子级别上计算大于百分位值的值的数量

时间:2017-09-18 17:03:33

标签: r dplyr

我有一组包含一组值和一个因子的数据框。

df <- as.data.frame(matrix(sample(0:10, 1*30, replace=TRUE), ncol=1))
colnames(df)[1] <- "values"
df$factor<- rep(c("Factor.A","Factor.B"), each = 15)

我想要做的是计算每组中第75个百分位值......

Percentile_75 <- aggregate(values ~ factor, function(x)
quantile(x,(0.75)), data = df)

...并查看每个因子级别在df内有多少值大于这些阈值。我可以手动为每个因素做这个,但实际上我有更多的因子水平,所以我猜有一个简洁(可能是dplyr)功能,能够轻松地做到这一点?提前谢谢。

2 个答案:

答案 0 :(得分:2)

dplyr你可以这样做:

library(dplyr)
df %>%
  group_by(factor) %>% 
  summarize(Percentile_75 = quantile(values,0.75),n_sup = sum(values > Percentile_75))

# # A tibble: 2 x 3
#       factor Percentile_75 n_sup
#        <chr>         <dbl> <int>
#   1 Factor.A           8.5     4
#   2 Factor.B           8.5     4

答案 1 :(得分:1)

data.table方法:

   df <- as.data.frame(matrix(sample(0:10, 1*30, replace=TRUE), ncol=1))
   colnames(df)[1] <- "values"
   df$factor<- rep(c("Factor.A","Factor.B"), each = 15)

   library(data.table)
   df <- setDT(df)

   df[,P_75 := quantile(values, probs = 0.75), by = factor][
  values > P_75, .(unique(P_75),.N), by = factor
   ]

#      factor  V1 N
# 1: Factor.A 7.5 4
# 2: Factor.B 8.0 2