我的数据框d带有一个布尔变量事件,指示某个事件是否在给定日期发生。我想创建一个新变量,指示距离最近的事件有多少观察(天)。
d=structure(list(date = structure(c(-365, -364, -363, -362, -361,
-360, -359, -358, -357, -356, -355, -354, -353, -352, -351, -350,
-349, -348, -347, -346), class = "Date"), event = c(TRUE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE,
FALSE)), .Names = c("date", "event"), row.names = c(NA, 20L
), class = "data.frame")
是否有可以执行此操作的功能?
答案 0 :(得分:5)
像
这样的东西apply(abs( sapply( which(d$event), "-", 1:nrow(d) )),1,min)
将概括@DDin的答案,超过2 TRUE
个值。
答案 1 :(得分:4)
> pmin( abs( sapply( which(d$event), "-", 1:nrow(d) )[,1] ) ,
abs( sapply( which(d$event), "-", 1:nrow(d) )[,2] ) )
[1] 0 1 2 3 4 5 6 7 6 5 4 3 2 1 0 1 2 3 4 5