我有以下问题: 我有一个面板数据集,其中包含唯一的标识符(区域),相应的日期(年),选举编号的虚拟对象(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)
答案 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