Angenommen, ich habe zwei Datensätze. Einer enthält eine Liste von Werbeaktionen mit Start-/Enddatum, und der andere enthält monatliche Verkaufsdaten für jedes Programm.Kombinieren Sie Datensätze nach Datumsbereich und kategorischer Variable
promotions = data.frame(
start.date = as.Date(c("2012-01-01", "2012-06-14", "2012-02-01", "2012-03-31", "2012-07-13")),
end.date = as.Date(c("2014-04-05", "2014-11-13", "2014-02-25", "2014-08-02", "2014-09-30")),
program = c("a", "a", "a", "b", "b"))
sales = data.frame(
year.month.day = as.Date(c("2013-02-01", "2014-09-01", "2013-08-01", "2013-04-01", "2012-11-01")),
program = c("a", "b", "a", "a", "b"),
monthly.sales = c(200, 200, 200, 400, 200))
Beachten Sie, dass sales$year.month.day
verwendet wird Jahr/Monat anzuzeigen. Tag ist enthalten, so dass R die Spalte einfacher als Vektor von Datumsobjekten behandeln kann, aber für die tatsächlichen Verkäufe nicht relevant ist.
Ich muss die Anzahl der Aktionen, die pro Monat für jedes Programm aufgetreten sind, ermitteln. Hier ist ein Beispiel für eine Schleife, die die Ausgabe erzeugt, ich will:
sales$count = rep(0, nrow(sales))
sub = list()
for (i in 1:nrow(sales)) {
sub[[i]] = promotions[which(promotions$program == sales$program[i]),]
if (nrow(sub[[i]]) > 1) {
for (j in 1:nrow(sub[[i]])) {
if (sales$year.month.day[i] %in% seq(from = as.Date(sub[[i]]$start.date[j]), to = as.Date(sub[[i]]$end.date[j]), by = "day")) {
sales$count[i] = sales$count[i] + 1
}
}
}
}
Beispiel Ausgabe:
sales = data.frame(
year.month.day = as.Date(c("2013-02-01", "2014-09-01", "2013-08-01", "2013-04-01", "2012-11-01")),
program = c("a", "b", "a", "a", "b"),
monthly.sales = c(200, 200, 200, 400, 200),
count = c(3, 1, 3, 3, 2)
)
jedoch seit meiner eigentlichen Datensätze sehr groß sind, diese Schleife stürzt ab, wenn ich es in R. laufen
Gibt es einen effizienteren Weg, um das gleiche Ergebnis zu erzielen? Vielleicht etwas mit dplyr?
Können Sie den gewünschten Ausgabedatenrahmen hinzufügen? Ich verstehe die Ausgabe Ihrer Schleife nicht wirklich. Auch wenn Sie an der Anzahl der Aktionen pro Monat pro Programm interessiert sind, warum benötigen Sie den Verkaufsdatenrahmen? – thepule
Ich habe den Beitrag bearbeitet, um die Ausgabe meiner Schleife einzuschließen. Die Schleife fügt dem ursprünglichen Verkaufsdatenrahmen eine "Zähl" -Spalte hinzu. – heo
Für meine Analyse brauche ich Umsatz und die Anzahl der Promotionen pro Monat für jedes Programm, also ja, der Umsatzdatenrahmen ist notwendig. – heo