如何以其他条件为条件汇总数据

时间:2019-06-17 05:45:15

标签: r

我有一个称为sales的数据框。

我想用通用标识符ID对每个月的销售量进行汇总。

我很难找到的是如何在有返回值的情况下执行此操作。

例如,当我将sales_Feb1980求和为ID 2时,应仅包括有收益的观察结果,而没有收益的观察结果应忽略不计?

数据看起来像什么。我还有更多的行和列。

   id    name  Returns_jan1980 Returns_feb1980 Sales_Jan1980 Sales_Feb1980   
  2b    LA         4.7%            5.6%             100              100
  2b    LA         5.7%                             250              100
  2b    LA         6.3%            5.8%             50               100
  5a    NY                         5.6%             30               200
  5a    NY         5.7%            3.6%             50               100

正确的输出

  id   name Sales_Jan1980 Sales_Jan19080   
  2       LA     400          200        
  5       NY     50           300   

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

使用基数R,我们首先可以找出"Returns""Sales"列,并假设它们的顺序正确,我们可以将相应的{{1 }}列,然后使用"Return""Sales"aggregate进行分组,并得出id

Name

答案 1 :(得分:0)

一种dplyrtidyr的可能性是:

df %>%
 rowid_to_column() %>%
 gather(var, val, -c(id, rowid, name)) %>%
 arrange(rowid, sub(".*_", "", var)) %>%
 group_by(rowid) %>%
 mutate(val = ifelse(is.na(lag(val, default = first(val))), NA, val)) %>%
 ungroup() %>%
 spread(var, val) %>%
 group_by(id, name) %>%
 summarise_at(vars(starts_with("Sales")), sum, na.rm = TRUE)

  id    name  Sales_Feb1980 Sales_Jan1980
  <chr> <chr>         <dbl>         <dbl>
1 2b    LA              200           400
2 5a    NY              300            50

它根据Sales列中的值将Returns列中的值设置为NA,然后执行求和。