Ho un dataframe dei dati delle serie temporali con le osservazioni giornaliere delle temperature. Devo creare una variabile fittizia che conta ogni giorno che ha una temperatura superiore alla soglia di 5C. Ciò sarebbe di per sé semplice, ma esiste una condizione aggiuntiva: il conteggio inizia solo dopo dieci giorni consecutivi sopra la soglia. Ecco un esempio di dataframe:Come creare un manichino condizionale in R?
df <- data.frame(date = seq(365),
temp = -30 + 0.65*seq(365) - 0.0018*seq(365)^2 + rnorm(365))
Penso di averlo fatto, ma con troppi cicli per i miei gusti. Questo è quello che ho fatto:
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)
Qualcuno potrebbe suggerire modi più semplici per farlo?
Gli altri due suggerimenti lavoro troppo, ma questo era il più semplice e sono in qualche modo incline a usare la soluzione R-base se esiste. Grazie! – Antti
Si consiglia di esaminare attentamente questa soluzione. Ho ottenuto valori fittizi = 1 nei giorni 67-75, nonostante il fatto che questi giorni non facciano parte di una corsa consecutiva di 10 giorni di> 5 gradi temp. – JHowIX
@ JHowIX, puoi fornire un esempio di questo? Si noti che i dati di esempio utilizzano 'rnorm' senza impostare un seed quindi le soluzioni non sono necessarie allo stesso modo (poiché i dati di esempio potrebbero differire) –