Ich habe einen Datenrahmen von Zeitreihendaten mit täglichen Beobachtungen von Temperaturen. Ich muss eine Dummy-Variable erstellen, die jeden Tag zählt, dessen Temperatur über einer Schwelle von 5C liegt. Dies wäre an sich einfach, aber es gibt eine zusätzliche Bedingung: Die Zählung beginnt erst, wenn zehn aufeinanderfolgende Tage über dem Schwellenwert liegen. Hier ist ein Beispiel Datenrahmen:Wie erstelle ich einen bedingten Dummy in R?
df <- data.frame(date = seq(365),
temp = -30 + 0.65*seq(365) - 0.0018*seq(365)^2 + rnorm(365))
Ich denke, ich habe es geschafft, aber mit zu vielen Schleifen für meinen Geschmack. Dies ist, was ich getan habe:
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)
Könnte jemand einfachere Möglichkeiten vorschlagen, dies zu tun?
Die beiden anderen Vorschläge zu arbeiten, aber das war die einfachste und ich bin irgendwie geneigt R-Basislösung zu verwenden, wenn eine solche vorhanden ist. Vielen Dank! – Antti
Sie können diese Lösung näher untersuchen. Ich habe Dummy-Werte = 1 an den Tagen 67-75, trotz der Tatsache, dass diese Tage nicht Teil eines konsekutiven 10-Tage-Laufs von> 5 Grad Temps sind. – JHowIX
@JHowIX, können Sie ein Beispiel dafür geben? Beachten Sie, dass die Beispieldaten 'rnorm' verwenden, ohne einen Seed zu setzen, so dass die Lösungen nicht gleich sind (da die Beispieldaten abweichen können) –