ich eine Reihe von Panel-Daten ähnlich zu haben:SUMIFS in R - eine Teilmenge aus von mehreren Kriterien zu schaffen und eine bestimmte Spalte Summieren
city <- c("ARI", "ATL", "BAL", "BUF", "CAR", "ARI", "ATL", "BAL", "BUF", "CAR", "ARI", "ATL", "BAL", "BUF", "CAR", "ARI", "ATL", "BAL", "BUF", "CAR", "ARI", "ATL", "BAL", "BUF", "CAR")
week <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5)
df <- as.data.frame(cbind(city, week))
df$week <- as.numeric(df$week)
df$x <- c(6, 3, 9, 12, 4, 3, 7, 8, 2, 12, 15, 6, 3, 9, 0, 14, 18, 2, 21, 15, 17, 9, 10, 1, 22)
Ich mag eine neue Variable erstellen, df$y
, das fasst df$x
für jede Stadt und für jede Woche vor der Woche, die gerade beobachtet wird. So sollte zum Beispiel df$y[25]
gleich 31
sein, weil sum(df[df$city == "CAR" & df$week < 5, 3])
gleich 31 ist.
Meine Frage ist, wie kann ich dies in einer Funktion schreiben, um dies automatisch zu tun?
sum(df[df$city == "CAR" & df$week < 5, 3])
für jede Team- und Wochenkombination zu verwenden wäre mühsam. Meine natürliche Neigung ist, etwas wie df$y <- sum(df[df$city == df$city & df$week < df$week, 3])
zu schreiben, aber das macht keinen Sinn. Ich bin neu in R und verstehe Funktionen nicht vollständig; Aber ist das der beste Weg für das, was ich versuche?
Danke für Ihre Hilfe!
Es wäre sowieso nie arbeiten, weil Sie verwendet 'as.data.frame (cbind (...))' zu erstellen die Daten. Ihre logischen Vergleiche werden nicht korrekt sein. Sie sollten 'data.frame()' verwenden, um die Daten zu erstellen. –