根据其他列中的条件查找从数据表到汇总表的值

时间:2017-02-06 11:49:13

标签: r

我在R中编写脚本时遇到了困难。

我想要的是:

  • 我有一个产品代码和产品描述列表。我想要得到的是表2中的视图,其中MinPercentile> = 0.95,MinPercentile> = 0.80和MinPercentile> = 0.60列填充.MinPercentile> = 0.95的规则是:

如果Percentile列中的值大于或等于0.95,并且该值同时最接近0.95(所以如果有两个值表示0.98和0.99那么我会对0.98感兴趣,因为它是接近0.95)然后将针对该prodcode的值出现的发票价格引入列MinPercentile> = 0.95。因此,查看表格4.19是百分位数0.956的发票价格,最接近0.95。

同样的规则适用于其他两列虽然只有价值标准不同,但我们正在考虑> = 0.80和> = 0.60并再次需要将最接近0.60和0.80百分位值的发票价格带入我的MinPercentile> = 0.80和MinPercentile> = 0.60列。

理想情况下,我希望在产品代码级别创建表2,该表是表1的汇总,符合我的标准。我希望这是有道理的。我真的很感激你的帮助。

感谢您的努力。

enter image description here

1 个答案:

答案 0 :(得分:0)

dplyrtidyr

dat <- data.frame(prod = c(rep('A', 9), rep('B', 3)), 
                  perc = c(.1, .2, .3, .36, .61, .8, .946, .956, .97, .3, .81, .98), 
                  price = runif(12, min = 2, max = 4))   

dat %>% 
    # Group by product and percentile range
    group_by(prod, 
             group = cut(perc, 
                         breaks = c(.6, .8, .95, 1), 
                         labels = c('Perc6', 'Perc8', 'Perc95')
                        )
    ) %>% 
    # Make sure percentile are sorted in each group
    arrange(perc) %>% 
    # Take just the first
    slice(1) %>% 
    # Drop percentile column
    select(-perc) %>%
    # Format as desired 
    spread(group, price)

Source: local data frame [2 x 5]
Groups: prod [2]

    prod    Perc6    Perc8   Perc95   `<NA>`
* <fctr>    <dbl>    <dbl>    <dbl>    <dbl>
1      A 2.633812 2.020161 3.505599 2.067004
2      B       NA 2.709279 2.126438 3.586837

请注意,它并没有达到您所要求的,因为它会将“百分位数”划分为“硬”。组。例如:对于产品B,Perc> =。6将是NA,因为在.6和.8之间没有记录,它将仅填充Perc&gt; =。8。 它还会有一个“NA”。它列出了最低百分位数的值。你可以放弃它。
可能有更好,更有效的方法来实现这一点,这是我想到的第一件事。