使用R查找基于条件返回值的函数

时间:2015-11-05 07:01:15

标签: r

我有一个值为

的表格
KId sales_month quantity_sold
100        1    0
100        2    0
100        3    0
496        2    6
511        2    10
846        1    4
846        2    6
846        3    1
338        1    6
338        2    0    

现在我需要输出

KId sales_month quantity_sold result
100           1     0         1
100           2     0         1
100           3     0         1
496           2     6         1
511           2     10        1
846           1     4         1
846           2     6         1
846           3     1         0
338           1     6         1
338           2     0         1

此处,如果3月份(3)的销售数量低于1月(1)和2月(2)的两个月的 60%,则计算必须如此结果应为 1 ,否则应显示 0 。需要解决方案才能执行此操作。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果我理解的话,您的要求是将第t个月的销售数量与t-1和t-2个月的销售数量进行比较。如果是这样,我可以建议使用dplyr包,它提供了在数据框中对行和变异列进行分组的好功能。

resultData <- group_by(data, KId) %>% 
    arrange(sales_month) %>% 
    mutate(monthMinus1Qty = lag(quantity_sold,1), monthMinus2Qty = lag(quantity_sold, 2)) %>% 
    group_by(KId, sales_month) %>%
    mutate(previous2MonthsQty = sum(monthMinus1Qty, monthMinus2Qty, na.rm = TRUE)) %>%  
    mutate(result = ifelse(quantity_sold/previous2MonthsQty >= 0.6,0,1)) %>%
    select(KId,sales_month, quantity_sold, result)

结果如下: example of data frame processed by the above code

添加

select(KId,sales_month, quantity_sold, result)

最后让我们只显示我们关心的列(而不是所有这些中间步骤)。

我相信这应该满足你的要求。 NA是结果列,由于0/0分区或前几个月没有数据。 如果需要将计算扩展到一个日历年之后,可以添加年份列并适当调整group_by()参数。 有关dplyr包的更多信息,请关注this link