我在创建一个滞后变量时遇到问题,该变量在两种不同的条件下重置:1)是否有战争开始(1或0); 2)一个国家是否转换。
以下是示例数据(EDITED):
year wartype war_onset country neighborWar
1 1970 <NA> 0 US 1
2 1971 <NA> 0 US 1
3 1972 <NA> 0 US 1
4 1973 <NA> 0 US 0
5 1974 civil 1 US 0
6 1975 <NA> 0 US 1
7 1976 <NA> 0 US 0
8 1970 <NA> 0 Rus 1
9 1971 <NA> 0 Rus 1
10 1972 <NA> 0 Rus 0
11 1973 civil 1 Rus 0
12 1974 <NA> 0 Rus 1
13 1975 <NA> 0 Rus 1
14 1976 <NA> 0 Rus 1
15 1977 <NA> 0 Rus 0
我想用上述条件在邻居战争上创建一个滞后变量,以便数据看起来像这样(EDITED):
year wartype war_onset country neighborWar ideal_lag_behavior
1 1970 <NA> 0 US 1 NA
2 1971 <NA> 0 US 1 NA
3 1972 <NA> 0 US 1 NA
4 1973 <NA> 0 US 0 3
5 1974 civil 1 US 0 2
6 1975 <NA> 0 US 1 NA
7 1976 <NA> 0 US 0 NA
8 1970 <NA> 0 Rus 1 NA
9 1971 <NA> 0 Rus 1 NA
10 1972 <NA> 0 Rus 0 NA
11 1973 civil 1 Rus 0 2
12 1974 <NA> 0 Rus 1 NA
13 1975 <NA> 0 Rus 1 NA
14 1976 <NA> 0 Rus 1 NA
15 1977 <NA> 0 Rus 0 3
而不是这个(EDITED):
> df
year wartype war_onset country neighborWar lagged_variable
1 1970 <NA> 0 US 1 NA
2 1971 <NA> 0 US 1 NA
3 1972 <NA> 0 US 1 NA
4 1973 <NA> 0 US 0 3
5 1974 civil 1 US 0 2
6 1975 <NA> 0 US 1 2
7 1976 <NA> 0 US 0 1
8 1970 <NA> 0 Rus 1 2
9 1971 <NA> 0 Rus 1 3
10 1972 <NA> 0 Rus 0 2
11 1973 civil 1 Rus 0 2
12 1974 <NA> 0 Rus 1 2
13 1975 <NA> 0 Rus 1 2
14 1976 <NA> 0 Rus 1 3
15 1977 <NA> 0 Rus 0 3
数据生成代码:
b <- c(1970, 1971, 1972, 1973, 1974, 1975, 1976, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977)
c <- c(NA, NA, NA, NA, "civil", NA, NA, NA, NA, NA, "civil", NA, NA, NA, NA)
d <- c(0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)
s <- c("US", "US", "US", "US", "US", "US", "US", "Rus", "Rus", "Rus", "Rus", "Rus", "Rus", "Rus", "Rus")
v <- c(1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0)
v3 <- v + lag(v,1) + lag(v,2) + lag(v,3)
df <- data.frame(b,c,d,s,v,v3)
colnames(df) <-c("year", "wartype", "war_onset", "country",
"neighborWar", "lagged variable")
滞后变量分解:
v <- c(1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0)
lag1 <- lag(v,1)
lag2 <- lag(v,2)
lag3 <- lag(v,3)
lags_plus_v <- v + lag(v,1) + lag(v,2) + lag(v,3)
df <- data.frame(v, lag1, lag2, lag3, lags_plus_v)
df
v lag1 lag2 lag3 lags_plus_v
1 1 NA NA NA NA
2 1 1 NA NA NA
3 1 1 1 NA NA
4 0 1 1 1 3
5 0 0 1 1 2
6 1 0 0 1 2
7 0 1 0 0 1
8 1 0 1 0 2
9 1 1 0 1 3
10 0 1 1 0 2
11 0 0 1 1 2
12 1 0 0 1 2
13 1 1 0 0 2
14 1 1 1 0 3
15 0 1 1 1 3
任何想法。我没有。
我已经尝试过plm包,无法找出任何解决方案。我一直在慢慢地攻击Hadley Wickham的书籍Advanced R,以获得关于产生功能的想法,但还没有把2和2放在一起。
答案 0 :(得分:2)
我认为这会产生你想要的东西,但要弄清楚这一点有点棘手。请在未来的问题中尝试更明确地说明所需的行为(及其推理)。
重点是从war_onset
创建(滞后)分组变量。
我按country
和新生成的变量x
对数据进行分组。 x
等于累计总和war_onset
的第一个滞后。我将添加一个包含x
变量的示例数据版本,以显示它的外观。然后,基于样本中的描述容易地计算其余部分 - 它是neighborWar
和同一变量的前3个滞后的总和。只要NA
的任何滞后也是NA,值为neighborWar
。
require(dplyr)
df %>%
group_by(country, x = lag(cumsum(war_onset), 1, default = 0)) %>%
mutate(lagged_variable = neighborWar + lag(neighborWar,1) + lag(neighborWar,2) + lag(neighborWar,3)) %>%
ungroup() %>% select(-x)
#Source: local data frame [15 x 6]
#
# year wartype war_onset country neighborWar lagged_variable
#1 1970 <NA> 0 US 1 NA
#2 1971 <NA> 0 US 1 NA
#3 1972 <NA> 0 US 1 NA
#4 1973 <NA> 0 US 0 3
#5 1974 civil 1 US 0 2
#6 1975 <NA> 0 US 1 NA
#7 1976 <NA> 0 US 0 NA
#8 1970 <NA> 0 Rus 1 NA
#9 1971 <NA> 0 Rus 1 NA
#10 1972 <NA> 0 Rus 0 NA
#11 1973 civil 1 Rus 0 2
#12 1974 <NA> 0 Rus 1 NA
#13 1975 <NA> 0 Rus 1 NA
#14 1976 <NA> 0 Rus 1 NA
#15 1977 <NA> 0 Rus 0 3
为了演示分组变量x
和lagWar的滞后,这里有一个显示所有列的示例:
df %>%
group_by(country, x = lag(cumsum(war_onset), 1, default = 0)) %>%
mutate(lag1 = lag(neighborWar,1),
lag2 = lag(neighborWar,2),
lag3 = lag(neighborWar,3),
lagged_variable = neighborWar + lag1 + lag2 + lag3)
#Source: local data frame [15 x 10]
#Groups: country, x
#
# year wartype war_onset country neighborWar x lag1 lag2 lag3 lagged_variable
#1 1970 <NA> 0 US 1 0 NA NA NA NA
#2 1971 <NA> 0 US 1 0 1 NA NA NA
#3 1972 <NA> 0 US 1 0 1 1 NA NA
#4 1973 <NA> 0 US 0 0 1 1 1 3
#5 1974 civil 1 US 0 0 0 1 1 2
#6 1975 <NA> 0 US 1 1 NA NA NA NA
#7 1976 <NA> 0 US 0 1 1 NA NA NA
#8 1970 <NA> 0 Rus 1 1 NA NA NA NA
#9 1971 <NA> 0 Rus 1 1 1 NA NA NA
#10 1972 <NA> 0 Rus 0 1 1 1 NA NA
#11 1973 civil 1 Rus 0 1 0 1 1 2
#12 1974 <NA> 0 Rus 1 2 NA NA NA NA
#13 1975 <NA> 0 Rus 1 2 1 NA NA NA
#14 1976 <NA> 0 Rus 1 2 1 1 NA NA
#15 1977 <NA> 0 Rus 0 2 1 1 1 3