我有一个称为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
感谢您的帮助。
答案 0 :(得分:0)
使用基数R,我们首先可以找出"Returns"
和"Sales"
列,并假设它们的顺序正确,我们可以将相应的{{1 }}列,然后使用"Return"
对"Sales"
和aggregate
进行分组,并得出id
。
Name
答案 1 :(得分:0)
一种dplyr
和tidyr
的可能性是:
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,然后执行求和。