【发布时间】:2016-08-24 12:54:01
【问题描述】:
我有以下数据框:
label target sale
low 5000 4000
low 11000 9000
low 5500 4500
low 12000 9500
middle 20000 18000
middle 22000 190000
high 100000 90000
high 120000 95000
我需要先按标签对数据框进行分组,然后计算:mean(target - sale) 仅适用于 target 超过 10000 的行,我尝试了以下代码:
library(dplyr)
avg_increase <- df %>%
group_by(labels) %>%
summarise(avg_sale_increase = ifelse(target >= 10000,mean(target - sale), 0))
我收到以下错误:
错误:需要单个值
由于summarise 只返回单个值,我是否应该使用deployer::do(或任何其他建议)更改我的代码来完成任务。
【问题讨论】:
-
你有没有想过这样做:
df %>% group_by(labels, target>=1000) %>% summarise(avg_sale_increase = mean(target - sale))。这不会直接回答您的问题,但它会为每个标签提供 2 行:超过 10K 的目标的平均销售增长和低于 10K 的目标的平均销售增长。还请考虑使用相对误差而不是绝对误差,这对于比较各种目标的销售增长非常有用。有了相对误差,可能就不需要过滤目标了。
标签: r dataframe dplyr data-analysis tidyr