在 R 中创建一个 'survival' 虚拟对象(面板数据)
creating a 'survival' dummy in R (panel data)
我想在我的不平衡面板中创建一个虚拟变量,如果该公司明年没有关闭(在这种情况下,我关闭意味着它没有在下一个时间段内记录),则该虚拟变量等于 0,否则为 1 .
我的数据是这样的:
firm_id year
1 90
1 92
2 90
2 92
2 94
2 96
3 90
所以我想要的输出看起来像:
firm_id year dummy
1 90 1
1 92 0
2 90 1
2 92 1
2 94 1
2 96 1
3 90 0
我不确定如何解决这个问题,我最初的想法是计算与每个公司相关的年数 firm_id 然后如果公司有 4 年,则始终分配 1,如果公司有 3 years 分配前 2 年 1 和 3rd 年 0,但后来我发现我有公司后来进入小组,所以这种方法不起作用。有没有更好的方法可以解决这个问题?
如果它是公司 ID 的最后一个条目并且不等于当年的最大值,则将值 0 分配给 dummy
。
df$dummy <- 1
df$dummy[!duplicated(df$firm_id, fromLast = TRUE) & df$year != max(df$year)] <- 0
df
# firm_id year dummy
#1 1 90 1
#2 1 92 0
#3 2 90 1
#4 2 92 1
#5 2 94 1
#6 2 96 1
#7 3 90 0
这要求您的数据像示例中那样按年份排序。如果没有排序可以先用order
排序。
df <- df[with(df, order(firm_id, year)), ]
数据
df <- structure(list(firm_id = c(1L, 1L, 2L, 2L, 2L, 2L, 3L), year = c(90L,
92L, 90L, 92L, 94L, 96L, 90L)), class = "data.frame", row.names = c(NA, -7L))
我们可以使用
library(dplyr)
df %>%
mutate(dummy = +(duplicated(firm_id, fromLast = TRUE) | year == max(year)))
firm_id year dummy
1 1 90 1
2 1 92 0
3 2 90 1
4 2 92 1
5 2 94 1
6 2 96 1
7 3 90 0
数据
df <- structure(list(firm_id = c(1L, 1L, 2L, 2L, 2L, 2L, 3L), year = c(90L,
92L, 90L, 92L, 94L, 96L, 90L)), class = "data.frame", row.names = c(NA, -7L))
我想在我的不平衡面板中创建一个虚拟变量,如果该公司明年没有关闭(在这种情况下,我关闭意味着它没有在下一个时间段内记录),则该虚拟变量等于 0,否则为 1 .
我的数据是这样的:
firm_id year
1 90
1 92
2 90
2 92
2 94
2 96
3 90
所以我想要的输出看起来像:
firm_id year dummy
1 90 1
1 92 0
2 90 1
2 92 1
2 94 1
2 96 1
3 90 0
我不确定如何解决这个问题,我最初的想法是计算与每个公司相关的年数 firm_id 然后如果公司有 4 年,则始终分配 1,如果公司有 3 years 分配前 2 年 1 和 3rd 年 0,但后来我发现我有公司后来进入小组,所以这种方法不起作用。有没有更好的方法可以解决这个问题?
如果它是公司 ID 的最后一个条目并且不等于当年的最大值,则将值 0 分配给 dummy
。
df$dummy <- 1
df$dummy[!duplicated(df$firm_id, fromLast = TRUE) & df$year != max(df$year)] <- 0
df
# firm_id year dummy
#1 1 90 1
#2 1 92 0
#3 2 90 1
#4 2 92 1
#5 2 94 1
#6 2 96 1
#7 3 90 0
这要求您的数据像示例中那样按年份排序。如果没有排序可以先用order
排序。
df <- df[with(df, order(firm_id, year)), ]
数据
df <- structure(list(firm_id = c(1L, 1L, 2L, 2L, 2L, 2L, 3L), year = c(90L,
92L, 90L, 92L, 94L, 96L, 90L)), class = "data.frame", row.names = c(NA, -7L))
我们可以使用
library(dplyr)
df %>%
mutate(dummy = +(duplicated(firm_id, fromLast = TRUE) | year == max(year)))
firm_id year dummy
1 1 90 1
2 1 92 0
3 2 90 1
4 2 92 1
5 2 94 1
6 2 96 1
7 3 90 0
数据
df <- structure(list(firm_id = c(1L, 1L, 2L, 2L, 2L, 2L, 3L), year = c(90L,
92L, 90L, 92L, 94L, 96L, 90L)), class = "data.frame", row.names = c(NA, -7L))