导入.CSV分组并查找四分位数/ IQR

时间:2018-10-15 19:34:46

标签: r

我想用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

2 个答案:

答案 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