Создать эквивалент функции sumif в R - PullRequest
1 голос
/ 29 апреля 2020

Я хотел бы создать новую переменную в фрейме данных в R, по существу, используя эквивалент функции "sumif" в Excel.

У меня есть фрейм данных, который выглядит следующим образом (но гораздо больше) :

Country   Year       Number of IMF programs during the year
  AFG     2000                       1
  ARG     2000                       1
  AFG     2001                       0
  ARG     2001                       1

Я хотел бы создать новую переменную «количество программ МВФ за период»: сумма количества программ в стране за период.

В Например, из столбца «Программы МВФ в течение года» видно, что в Афганистане было 1 программа за период (1 в 2000 году, 0 в 2001 году), а в Аргентине - 2. поэтому таблица будет выглядеть следующим образом:

Country   Year  IMF programs during the year    N of programs over the period
  BRA     2000                 1                               1
  ARG     2000                 1                               2
  BRA     2001                 0                               1
  ARG     2001                 1                               2

Я видел учебные пособия, но они показывают только, как создать подмножества наблюдений, соответствующих определенным критериям, а затем вычислить суммы в подмножествах. Я бы смог это сделать, но это не то, что мне нужно. Мне нужна была бы другая переменная ...

Интуиция за функцией была бы такой: сумма "количество программ в году" if ("страна" = "страна, соответствующая этой строке").

Не могли бы вы дать мне какое-нибудь руководство?

Большое спасибо за вашу помощь!

Ответы [ 2 ]

3 голосов
/ 29 апреля 2020
library(tidyverse)

want <- df %>%
        group_by(country) %>%
        mutate(NPrograms = sum(IMFPrograms))
1 голос
/ 29 апреля 2020

Мы можем использовать aggregate из base R

aggregate(IMFPrograms ~ country, df,  FUN  = sum)

Если нам нужно создать столбец, используйте ave

df$NPrograms <- with(df, ave(IMFPrograms, country, FUN = sum))

Или используя rowsum

rowsum(df$IMFPrograms, df$country)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...