如何将dplyr::summaries转换为dplyr::do

如何将dplyr::summaries转换为dplyr::do,r,dataframe,dplyr,data-analysis,tidyr,R,Dataframe,Dplyr,Data Analysis,Tidyr,我有以下数据框: 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

我有以下数据框:

 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))  
库(dplyr)
平均增长%
分组依据(标签)%>%
总结(平均销售额增加=如果其他(目标>=10000,平均值(目标销售额),0))
我得到以下错误:

错误:应为单个值


由于
summary
只返回单个值,我是否应该使用
deployer::do
(或任何其他建议)更改代码以完成任务。

您可以通过对变量分组来筛选行数>10000

dat %>% filter(target>10000) %>% 
    group_by(label) %>% mutate(differ = mean(target-sale))

您可以通过对变量进行分组来筛选大于10000的行

dat %>% filter(target>10000) %>% 
    group_by(label) %>% mutate(differ = mean(target-sale))

问题在于ifelse,如果长度等于输入逻辑,它将返回一个向量,因此将根据需要多次计算平均值

这应该行得通

avg_increase <- df %>% 
                group_by(labels) %>% 
                filter(target >= 10000) %>% 
                summarise(target = mean(target-sale))
平均增长%
分组依据(标签)%>%
过滤器(目标>=10000)%>%
总结(目标=平均值(目标销售额))

问题在于ifelse,如果长度等于输入逻辑,它将返回一个向量,因此将根据需要多次计算平均值

这应该行得通

avg_increase <- df %>% 
                group_by(labels) %>% 
                filter(target >= 10000) %>% 
                summarise(target = mean(target-sale))
平均增长%
分组依据(标签)%>%
过滤器(目标>=10000)%>%
总结(目标=平均值(目标销售额))

Apols,同样的时间,同样的答案。完全相同的答案,非常感谢,因为@njpurgo快了一点,我选择它作为最佳答案。Apols,同样的时间,同样的答案。完全相同的答案,非常感谢,因为@njpurgo快了一点,我选择它作为最佳答案。你想过做什么吗:
df%>%group\u by(标签,目标>=1000)%>%总结(平均销售额增长=平均值(目标-销售额))这不直接回答你的问题,但它会给你提供2条线:每一个目标的销售额超过10K,平均销售量增加到10K以下的目标。请考虑使用相对误差而不是绝对误差,这有助于比较各种目标的销售增长。相对错误,可能不太需要筛选目标。您是否考虑过这样做:
df%>%group\u by(labels,target>=1000)%%>%summary(avg\u sale\u increase=mean(target-sale))这不直接回答你的问题,但它会给你提供2条线:每一个目标的销售额超过10K,平均销售量增加到10K以下的目标。请考虑使用相对误差而不是绝对误差,这有助于比较各种目标的销售增长。相对误差较大时,可能不需要过滤目标。