使用NA将数据聚合到变量

时间:2019-05-10 15:28:10

标签: r

我有以下问题: 我有一个面板数据集,其中包含唯一的标识符(区域),相应的日期(年),选举编号的虚拟对象(election.dummy; 1 =面板中的第一次选举,2 =面板中的第二次选举),以及控件(例如gdp)。由于选举仅每四年进行一次,因此我想取消控制,将前几年的平均值和选举年与选举假人一起分配给该行(请参见示例)。有任何想法该怎么做吗?

这是一个简化的示例:

原始数据集:

area <- c(rep(1:2, each = 6))
year <- rep(2001:2006,2)
election.dummy <- c(NA, 1, NA, NA, NA, 2, NA, 1, NA, NA, NA, 2)
gdp <- c(2,4,1,3,1,5,3,5,1,7,3,5)
d2 <- data.frame(area,year,election.dummy,gdp)

所需结果:

area <- c(rep(1:2, each = 2))
year <- c(2002, 2006, 2002, 2006)
election.dummy <- c(1, 2, 1, 2)
gdp <- c(3,2.5,4,4)
d_aggregated <- data.frame(area,year,election.dummy,gdp)

1 个答案:

答案 0 :(得分:1)

一种选择是通过在'election.dummy'中出现NA来创建分组变量,并通过'area'进行分组,然后mutate将{gdp'替换为{ {g}的{1}},mean的行在'election.dummy'中具有NA元素,而filter的关注列在select

之后
ungroup

更新

使用更新的数据集

library(tidyverse)
d %>% 
  group_by(area, grp = cumsum(is.na(election.dummy))) %>%
  mutate(gdp = mean(gdp)) %>% 
  filter(!is.na(election.dummy)) %>%
  ungroup %>%
  select(-grp)
# A tibble: 4 x 4
#   area  year election.dummy   gdp
#  <int> <int>          <dbl> <dbl>
#1     1  2002              1     3
#2     1  2004              2     2
#3     2  2002              1     3
#4     2  2004              2     4