Как получить сумму переменной, только для одного значения другой переменной, используя dplyr в R - PullRequest
0 голосов
/ 15 мая 2018

У меня есть такой фрейм данных

df <- data.frame(
time = rep(c("2002", "2003", "2004", "2005", "2006"), 10),
DHB = rep(c("HB", "CM", "CC", "CT", "WA"), 10),
ethnic = rep(c(rep(c("M"),5, rep(c("T"), 5))), 5),
pop = rnorm()
)

Я хочу добавить новую переменную, Totpop, которая является суммой 'pop', где этническая = T. Я попробовал этот код

df <- df %>%
mutate(totpop = filter(ethnic== "T") %>% sum(pop))

Я получаю это сообщение об ошибке Error in UseMethod("mutate_") : no applicable method for 'mutate_' applied to an object of class "function" Что я предполагаю, означает, что мои утверждения не в порядке, или я делаю что-то еще глупо. Может ли кто-нибудь помочь мне сделать это правильно? Спасибо

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Аналогично другому ответу - но если вы хотите добавить столбец с мутацией вместо суммирования:

set.seed(2018)
df <- data.frame(
  time = rep(c("2002", "2003", "2004", "2005", "2006"), 10),
  DHB = rep(c("HB", "CM", "CC", "CT", "WA"), 10),
  ethnic = rep(c(rep("M", 5), rep("T", 5)), 5),
  pop = rnorm(50))

df <-  df %>%
  group_by(ethnic) %>%
  mutate(totpop = sum(pop))
0 голосов
/ 15 мая 2018

Ваш пример данных выдает ошибку; исправив это, вы можете сделать следующее

set.seed(2018);
df <- data.frame(
    time = rep(c("2002", "2003", "2004", "2005", "2006"), 10),
    DHB = rep(c("HB", "CM", "CC", "CT", "WA"), 10),
    ethnic = rep(c(rep("M", 5), rep("T", 5)), 5),
    pop = rnorm(50))

df %>%
    filter(ethnic == "T") %>%
    summarise(totpop = sum(pop));
#
#     totpop
#1 -2.987487

Или, в зависимости от того, что вы хотите сделать дальше, вы также можете сгруппировать по ethnic и затем рассчитать по группам pop суммы:

df %>%
    group_by(ethnic) %>%
    summarise(totpop = sum(pop));
## A tibble: 2 x 2
#  ethnic totpop
#  <fct>   <dbl>
#1 M       -1.03
#2 T       -2.99
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...