我有以下数据框:
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
我需要首先按标签对数据框进行分组,然后仅针对目标超过10000的行计算:均值(目标 - 销售),我尝试使用以下代码:
library(dplyr)
avg_increase <- df %>%
group_by(labels) %>%
summarise(avg_sale_increase = ifelse(target >= 10000,mean(target - sale), 0))
我收到以下错误:
错误:期待单个值
由于summarise
只返回单个值,我应该使用deployer::do
(或任何其他建议)更改我的代码来完成任务。
答案 0 :(得分:4)
问题在于ifelse,如果长度等于输入逻辑,则返回向量,因此平均值将根据需要计算多次。
这应该有效
avg_increase <- df %>%
group_by(labels) %>%
filter(target >= 10000) %>%
summarise(target = mean(target-sale))
答案 1 :(得分:2)
您可以过滤行&gt; 10000 bevor将变量分组。
dat %>% filter(target>10000) %>%
group_by(label) %>% mutate(differ = mean(target-sale))