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

时间:2016-08-24 12:54:02

标签: 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

我需要首先按标签对数据框进行分组,然后仅针对目标超过10000的行计算:均值(目标 - 销售),我尝试使用以下代码:

library(dplyr)
avg_increase <- df %>% 
                  group_by(labels) %>%
                  summarise(avg_sale_increase = ifelse(target >= 10000,mean(target - sale), 0))  

我收到以下错误:

  

错误:期待单个值

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

2 个答案:

答案 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))