【发布时间】:2016-05-10 00:55:49
【问题描述】:
我有一个包含每日温度观察的时间序列数据的数据框。我需要创建一个虚拟变量来计算温度高于 5C 阈值的每一天。这本身很容易,但存在一个附加条件:仅在连续十天超过阈值后才开始计数。这是一个示例数据框:
df <- data.frame(date = seq(365),
temp = -30 + 0.65*seq(365) - 0.0018*seq(365)^2 + rnorm(365))
我想我已经完成了,但是我喜欢的循环太多了。这就是我所做的:
df$dummyUnconditional <- 0
df$dummyHead <- 0
df$dummyTail <- 0
for(i in 1:nrow(df)){
if(df$temp[i] > 5){
df$dummyUnconditional[i] <- 1
}
}
for(i in 1:(nrow(df)-9)){
if(sum(df$dummyUnconditional[i:(i+9)]) == 10){
df$dummyHead[i] <- 1
}
}
for(i in 9:nrow(df)){
if(sum(df$dummyUnconditional[(i-9):i]) == 10){
df$dummyTail[i] <- 1
}
}
df$dummyConditional <- ifelse(df$dummyHead == 1 | df$dummyTail == 1, 1, 0)
谁能提出更简单的方法来做到这一点?
【问题讨论】: