【发布时间】:2018-08-07 01:38:06
【问题描述】:
我有一个数据框/小标题,其中包含多个国家/地区的年度观察结果。在特定事件发生的年份中,变量 event 的值是 1。
我现在正在尝试指定一个新列event.10yrs,它在事件结束后的 9 年内获得值 1(如果事件持续数年,则为事件的最后一年)。在新事件发生且不是新事件的最后一年的年份中,新列event.10yrs 的值为 0。
低于一个国家的数据。列event.10yrs 是所需的输出。
df <-structure(list(year = c(1970, 1971, 1972, 1973, 1974, 1975, 1976,
1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987,
1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010, 2011, 2012, 2013, 2014, 2015), ccode = c(516, 516, 516,
516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516,
516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516,
516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516,
516, 516, 516, 516), event = c(0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, NA, NA, NA, NA, NA), event.last.y = c(0,
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, NA,
NA, NA, NA, NA), event.10yrs = c(NA, 0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, NA, NA, NA)), row.names = c(NA,
-46L), vars = "ccode", drop = TRUE, class = c("grouped_df", "tbl_df",
"tbl", "data.frame"), indices = list(0:45), group_sizes = 46L, biggest_group_size = 46L, labels = structure(list(
ccode = 516), row.names = c(NA, -1L), vars = "ccode", drop = TRUE, class = "data.frame", .Names = "ccode"), .Names = c("year",
"ccode", "event", "event.last.y", "event.10yrs"))
到目前为止我使用 dplyr 包的尝试:
df <- df %>%
mutate(event.10yrs=case_when(event!=1 & year-9 < year[event.last.y==1] ~ 1,
TRUE ~ 0))
然而,这会产生以下警告:
Warning message:
In year < year[rs.war.last.y == 1] :
longer object length is not a multiple of shorter object length
感谢任何提示。
【问题讨论】:
-
你怎么知道有一个新事件或它什么时候结束?
-
@JulienNavarre colum 事件发生时为 1;列 event.last.y 标识事件的最后一年。
-
那么为什么 1970 是
NA和 19710? -
@JulienNavarre 1970 一定是错误,也应该是 0; 1970 年没有事件(因此为 0)。然而,感兴趣的年份仅从 1972 年开始(直到 1981 年);然后是 1998 年(直到 1999 年); 2003 年(至 2010 年)。很多谢谢。