r - 在 R 中创建一个面板数据框 - 其中一个变量中的值随时间变化
问题描述
使用以下数据:
id <- c(10420,10740, 12060,12060, 12060)
year <- c(2004, 2002, 2003, 2003, 2006)
y <- c(1,1,1,1,1)
data <- data.frame(id, year, y)
data
id year y
1 10420 2004 1
2 10740 2002 1
3 12060 2003 1
4 12060 2003 1
5 12060 2006 1
我想创建一个具有以下结构的面板数据:
datapasta::tribble_paste(paneldata)
tibble::tribble(
~year, ~id, ~y,
2002, 10420, 0,
2003, 10420, 0,
2004, 10420, 1,
2005, 10420, 1,
2006, 10420, 1,
2007, 10420, 1,
2002, 10740, 1,
2003, 10740, 1,
2004, 10740, 1,
2005, 10740, 1,
2006, 10740, 1,
2007, 10740, 1,
2002, 12060, 0,
2003, 12060, 2,
2004, 12060, 2,
2005, 12060, 2,
2006, 12060, 3,
2007, 12060, 3
)
我尝试按照代码创建上面的面板数据集。
g <- with(data, expand.grid(year = seq(2002,2007), id= unique(id),y=0))
data2 <- rbind(data, g)
data3 <-aggregate(y ~ year + id, data2, sum)[c("id", "year", "y")]
但是,上面的代码不会创建面板数据,就好像没有执行以下操作一样:对于特定的 id 和年份,如果存在新的观察值,变量 y 中的值应该改变。例如,id 为 12060 的 y 的值在 2002 年将为零,然后在 2003 年和 2005 年将更改为值 2,然后在 2006 年至 2007 年更改为值 3。
任何和所有的想法将不胜感激。
解决方案
我们通过获取整个数据的to + 1 of 'year'的影响来扩展行complete
(在按'id'分组之后),并在按'id'分组后获得'y'的累积总和seq
min
max
library(dplyr)
library(tidyr)
data %>%
group_by(id, year) %>%
mutate(y = cumsum(y)) %>%
group_by(id) %>%
filter(!duplicated(year, fromLast = TRUE)) %>%
complete(year = min(.$year):(max(.$year) + 1), fill = list(y = 0)) %>%
mutate(y = cumsum(y))
# A tibble: 18 x 3
# Groups: id [3]
# id year y
# <dbl> <dbl> <dbl>
# 1 10420 2002 0
# 2 10420 2003 0
# 3 10420 2004 1
# 4 10420 2005 1
# 5 10420 2006 1
# 6 10420 2007 1
# 7 10740 2002 1
# 8 10740 2003 1
# 9 10740 2004 1
#10 10740 2005 1
#11 10740 2006 1
#12 10740 2007 1
#13 12060 2002 0
#14 12060 2003 2
#15 12060 2004 2
#16 12060 2005 2
#17 12060 2006 3
#18 12060 2007 3
推荐阅读
- javascript - 使用 Navlink Router 和 Switch Route 链接网站
- vue.js - Vue 3 相当于 createApp 中的 beforeMount
- javascript - HTML 视频元素从单个视频播放多个音轨
- marketo - 使用带有 Marketo 活动批量提取 API 的过滤器类型 UpdatedAt
- algorithm - 如何推导出大 O 符号?
- python - Pycharm 后端问题
- android - 将时间(录制时)显示为 Android 视频录制上的叠加层
- qt - 如何获取 qml 中任何文件夹中的文件?
- typescript - 我无法在 Vue3.js 项目的 main.ts(TypeScript) 中导入一些库
- python - 如果一列包含另一个值,我将如何组合两个熊猫数据框