gpt4 book ai didi

r - 如何在 R 中创建条件假人?

转载 作者:行者123 更新时间:2023-12-04 11:51:02 25 4
gpt4 key购买 nike

我有一个时间序列数据的数据框,每天观察温度。我需要创建一个虚拟变量来计算温度高于 5C 阈值的每一天。这本身很容易,但存在一个附加条件:仅在连续 10 天高于阈值后才开始计数。这是一个示例数据框:

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)

谁能建议更简单的方法来做到这一点?

最佳答案

我认为您可以在 zoo package 中使用简单的 ifelse 和滚动应用功能的组合。实现您的目标。最后一步只涉及填充结果以说明前 N-1 天没有足够的信息来填充窗口。

library(zoo)

df <- data.frame(date = seq(365),
temp = -30 + 0.65*seq(365) - 0.0018*seq(365)^2 + rnorm(365))

df$above5 <- ifelse(df$temp > 5, 1, 0)
temp <- rollapply(df$above5, 10, sum)
df$conseq <- c(rep(0, 9),temp)

关于r - 如何在 R 中创建条件假人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35132812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com