Добавить переменную с суммированием, но оставить все остальные переменные в R - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть набор данных с пожертвованиями, сделанными различным политикам, где каждая строка является конкретным пожертвованием c.

donor.sector <- c(sector A, sector B, sector X, sector A, sector B)
total <- c(100, 100, 150, 125, 500)
year <- c(2006, 2006, 2007, 2007, 2007)
state <- c(CA, CA, CA, NY, WA)
target_specific <- c(politician A, politician A, politician A, politician B, politician C)
dat <- as.data.frame(donor.sector, total, year, target_specific, state)

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

library(dplyr)
  new.df <- dat%>%
  group_by(target_specific, year)%>%
  summarise(mean= mean(total))

Моя проблема в том, что, поскольку я группирую это, результат имеет только три переменные: среднее, год и целевой показатель c. Есть ли способ, которым я могу сделать это и создать новый фрейм данных, в котором я храню переменные уровня политиков, такие как состояние?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

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

aggregate(total ~ ., subset(data, select = -donor.sector), mean)
0 голосов
/ 29 апреля 2020

Это можно сделать двумя способами:

Включить дополнительные переменные в group_by:

library(dplyr)

dat%>%
   group_by(target_specific, year, state)%>%
   summarise(mean= mean(total))

#  target_specific  year state  mean
#  <chr>           <dbl> <chr> <dbl>
#1 politician A     2006 CA      100
#2 politician A     2007 CA      150
#3 politician B     2007 NY      125
#4 politician C     2007 WA      500

Или сохранить ту же структуру group_by, в которую можно включить first значение дополнительной переменной.

dat%>%
  group_by(target_specific, year)%>%
  summarise(mean= mean(total), state = first(state))
...