Da der zweite Datenrahmen durch Date
seine Rückkehr sortiert, können wir match
verwenden Sie den Bereich von Return
bis durchschnittlich zu finden:
df1$MeanReturn=mapply(function(o,c) mean(df2$Return[o:c]), match(df1$OpenDate,df2$Date), match(df1$CloseDate,df2$Date))
Hier verwenden wir mapply
die mean
Funktion zur offenen anzuwenden und in der Nähe Zeilen im zweiten Datenrahmen df2
, die df1$OpenDate
bzw. df1$CloseDate
entsprechen.
die Daten mit Ihnen zur Verfügung gestellten, df1
wird:
df1
## individual OpenDate CloseDate MeanReturn
##1 1 2010-01-04 2010-01-08 579.4000
##2 2 2010-01-01 2010-01-08 535.8750
##3 3 2010-01-03 2010-01-06 472.2500
##4 4 2010-01-02 2010-01-05 602.7500
##5 5 2010-01-04 2010-01-06 558.6667
Daten:
df1 <- structure(list(individual = 1:5, OpenDate = structure(c(4L, 1L,
3L, 2L, 4L), .Label = c("2010-01-01", "2010-01-02", "2010-01-03",
"2010-01-04"), class = "factor"), CloseDate = structure(c(3L,
3L, 2L, 1L, 2L), .Label = c("2010-01-05", "2010-01-06", "2010-01-08"
), class = "factor"), MeanReturn = c(579.4, 535.875, 472.25,
602.75, 558.666666666667)), .Names = c("individual", "OpenDate",
"CloseDate", "MeanReturn"), row.names = c(NA, -5L), class = "data.frame")
## individual OpenDate CloseDate MeanReturn
##1 1 2010-01-04 2010-01-08 579.4000
##2 2 2010-01-01 2010-01-08 535.8750
##3 3 2010-01-03 2010-01-06 472.2500
##4 4 2010-01-02 2010-01-05 602.7500
##5 5 2010-01-04 2010-01-06 558.6667
df2 <- structure(list(Date = structure(1:8, .Label = c("2010-01-01",
"2010-01-02", "2010-01-03", "2010-01-04", "2010-01-05", "2010-01-06",
"2010-01-07", "2010-01-08"), class = "factor"), Return = c(532L,
645L, 213L, 567L, 986L, 123L, 567L, 654L)), .Names = c("Date",
"Return"), class = "data.frame", row.names = c(NA, -8L))
## Date Return
##1 2010-01-01 532
##2 2010-01-02 645
##3 2010-01-03 213
##4 2010-01-04 567
##5 2010-01-05 986
##6 2010-01-06 123
##7 2010-01-07 567
##8 2010-01-08 654
Willkommen bei SO! Wenn Sie Daten im 'r'-Tag teilen möchten, fügen Sie bitte eine' dput() 'davon hinzu. Bewegen Sie den Mauszeiger über das 'r'-Tag, um weitere Informationen zu erhalten. –
also für jede Zeile, die Sie wollen, die eine vor und nach? – statquant