Суммируйте, используя условие для одного столбца

Пример данных:

df <- data.frame(HELP = c("Yes", "Yes", "Yes", "No", "Yes", "No"))

Я сделал:

cdata <- ddply(df, c("HELP"), summarise,
           Total = sum(df$HELP == 'No'),
           Probability = Total/nrow(df)

)

но до значения "Да" остается то же значение, что и "Нет". Я попытался использовать условие "если", но не сработало.

Что я хочу сделать, так это подвести справку с помощью справки, где она будет иметь сумму df.help == "Нет" и сумму df.help == "Да" и их соответствующие вероятности.

Конечный результат должен выглядеть примерно так:

|    | Help | Total | Probability  |
|----|------|-------|--------------|
|  1 | Yes  | 4     | 0.666        |
|  2 | No   | 2     | 0.333        |

Каков подходящий способ сделать это с ddply или другим способом?

С уважением

1 ответ

Решение

Я предлагаю использовать dplyr, как вы отметили. Это позволяет вам легко группировать ваши данные, используя group_byи используя summarise а также mutate Вы можете добавить новые столбцы для достижения желаемого результата.

> library(dplyr)
> df %>% group_by(HELP) %>% summarise(Total = n()) %>% mutate(Probability = Total / sum(Total))
# A tibble: 2 x 3
    HELP Total Probability
  <fctr> <int>       <dbl>
1     No     2   0.3333333
2    Yes     4   0.6666667

объяснение

%>% перенаправляет вывод команды слева в команду справа от оператора. Вы можете связать несколько команд друг с другом, но пока это работает, это может быстро стать беспорядком для чтения.

group_by(HELP) разделит ваш фрейм данных на эти строки с одинаковыми значениями в HELP, Это также может занять несколько столбцов.

summarise(Total = n()) - n() Другой dplyr функция, которая устанавливается на количество строк в вашей группе. В обоих summarise а также mutate новые имена столбцов предоставляются без ' или же "

mutate(Probability = Total / sum(Total)) - простой расчет, основанный на результатах, только что рассчитанных в предыдущем шаге

Другие вопросы по тегам