我想用R来找到50%,75%和90%的四分位数和四分位数间距。
我的.csv文件有78列和约10万行。我最初使用excel并按SKU和Vendor进行分组,然后按降序排列一系列成本。我将需要在更大的文件上运行它,因此我需要学习如何使用更强大的工具。
我想按SKU编号和供应商名称分组。我希望四分位数基于“费用”字段。我不确定如何完成此操作,因此只能看到按SKU和供应商名称划分的成本。数据如下所示。
SKU Vendor COST
173 A 2.66
194 B 121.22
201 B 86.07
241 B 81.51
243 B 78.09
534 C 16.32
534 D 1.72
534 D 1.721428571
534 D 1.722
534 D 1.722166667
534 D 1.7225
534 D 1.723333333
534 D 2.0237
802 D 0.1355
802 D 0.135666667
802 D 0.19
802 D 22.8
答案 0 :(得分:0)
您可以使用dplyr完成此操作
首先,使用group_by
,然后使用summarize
并设置要使用的quantile
。 []的子集可提取所需的分位数。 quantile(cost, probs(.5, .75, .9)[1]
将为您提供.5分位数。
library(dplyr)
df <- data.frame(sku = c(176, 176, 176, 534, 534, 534, 534, 4, 4, 4, 4, 3, 3, 3),
Vendor = c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C'),
cost = c(23, 34, 45, 56, 67, 78, 45, 65, 22, 33, 44, 5, 88, 55))
df_summary <- df %>%
group_by(sku, Vendor) %>%
summarize(q50 = quantile(cost, probs = c(.5, .75, .9))[1],
q75 = quantile(cost, probs = c(.5, .75, .9))[2],
q90 = quantile(cost, probs = c(.5, .75, .9))[3])
> df_summary
# A tibble: 6 x 5
# Groups: sku [?]
sku Vendor q50 q75 q90
<dbl> <fct> <dbl> <dbl> <dbl>
1 3. C 55.0 71.5 81.4
2 4. B 33.0 49.0 58.6
3 4. C 44.0 44.0 44.0
4 176. A 34.0 39.5 42.8
5 534. A 61.5 64.2 65.9
6 534. B 61.5 69.8 74.7
答案 1 :(得分:0)
使用常规的旧基本函数。
请注意,我和Matt都从字面上解释了“按SKU编号和供应商名称分组”。我还整理了示例数据,使其更加整洁。
tt <- structure(list(SKU = c(194L, 194L, 194L, 241L, 241L, 241L,
534L, 534L, 534L, 534L, 534L, 534L, 534L, 802L, 802L, 802L,
802L), Vendor = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("B", "D"), class =
"factor"), COST = c(2.66, 121.22, 86.07, 81.51, 78.09, 78.2,
1.72, 1.721, 1.722, 1.7221, 1.7225, 1.7233, 2.0237, 0.1355,
0.1357, 0.19, 22.8)), class = "data.frame", row.names = c(NA,
-17L))
summ <- function(x) {
c(quantile(x, probs=c(0.5, 0.75, 0.9)), IQR=IQR(x))
}
aggregate(COST ~ SKU + Vendor, tt, summ)
# SKU Vendor COST.50% COST.75% COST.90% COST.IQR
# 1 194 B 86.07000 103.64500 114.19000 59.28000
# 2 241 B 78.20000 79.85500 80.84800 1.71000
# 3 534 D 1.72210 1.72290 1.84346 0.00140
# 4 802 D 0.16285 5.84250 16.01700 5.70685