2016-08-24 2 views
0

У меня есть следующий кадр данных:как преобразовать dplyr :: резюме в dplyr :: сделать

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

и я получаю следующее сообщение об ошибке:

Error: expecting a single value

в summarise возвращает только одно значение, должен ли я изменить свой код, используя deployer::do (или любое другое предложение) для выполнения задачи.

+0

Вы думали о выполнении: 'ф.р.%>% group_by (метки, цель> = 1000)%>% реферирования (avg_sale_increase = средняя (цель - продажа))' , Это не ответит на ваш вопрос напрямую, но он предоставит вам 2 строки для каждой метки: увеличение продажи avg для целей более 10K и среднее увеличение продаж для целей ниже 10K. Также рассмотрите возможность использования относительной ошибки вместо абсолютной ошибки, что полезно для сравнения увеличения продаж для широкого круга целей. При относительных ошибках, вероятно, меньше необходимости фильтровать цели. –

ответ

4

Проблема с IfElse, который возвращает вектор, если длина равна вход логического, так что среднее значение будет рассчитываться столько раз, сколько требуется.

Это должно работать

avg_increase <- df %>% 
       group_by(labels) %>% 
       filter(target >= 10000) %>% 
       summarise(target = mean(target-sale)) 
2

Вы можете фильтровать строки> 10000 bevor, группируя переменную.

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

Apols, одновременно, такой же ответ. – NJBurgo

+0

точно такой же ответ, большое спасибо, поскольку @NJBurgo был немного быстрее, я выбираю его как лучший ответ. – sanaz

Смежные вопросы