Ich habe zwei Datenrahmen erhalten: einen mit den Daten verschiedener Probenahmeereignisse und einen anderen mit der Konnektivität eines Flusses, der mit 0, 1 oder 2 für jeden Tag des Jahres angegeben ist.
Jetzt möchte ich die Anzahl (oder den Prozentsatz) der Tage berechnen, an denen eine bestimmte Konnektivität für jede Probe zwischen dem Probenahmedatum und 6 Monate zuvor (180 Tage) aufgetreten ist.
Meine beiden Datenrahmen sehen so aus:
Date <- seq(as.Date("2015-01-01"), as.Date("2020-12-31"), by="days")
df <- data.frame(Date)
df$Connect <- round(runif(2192, min=0, max=2),0)
Sample_nr <- c(1:100)
df2 <- data.frame(Sample_nr)
df2$Date <- sample(seq(as.Date('2015/07/01'), as.Date('2020/12/31'), by="day"), 100)
Was wäre ein eleganter Ansatz, um diese Daten zu erhalten?
Danke!
Tschüss, Twin
Lösung des Problems
Das ist vielleicht nicht besonders elegant, aber ziemlich einfach. Zunächst einige reproduzierbare Daten:
set.seed(42)
Date <- seq(as.Date("2015-01-01"), as.Date("2020-12-31"), by="days")
Connect <- sample(0:2, 2192, replace=TRUE)
C0 <- cumsum(mydata$Connect==0)
C1 <- cumsum(mydata$Connect==1)
C2 <- cumsum(mydata$Connect==2)
mydata <- data.frame(Date, Connect, C0, C1, C2)
Enthält jetzt mydata
Ihre ursprünglichen Spalten plus kumulierte Summen für die drei Konnektivitätstypen. Wir müssen die Datenstichprobe beginnend bei ziehen mydata[181, ]
, da die Werte davor keine 180-tägigen vorherigen Messungen haben:
sample <- sample(mydata$Date[181:2192], 5)
end <- which(mydata$Date %in% sample)
begin <- end - 180
data.frame(Date = mydata$Date[end], mydata[end, 3:5] - mydata[begin, 3:5])
# Date C0 C1 C2
# 262 2015-09-19 64 65 51
# 377 2016-01-12 59 65 56
# 494 2016-05-08 55 67 58
# 754 2017-01-23 57 64 59
# 1057 2017-11-22 57 66 57
Die Werte sind die Anzahl der einzelnen Konnektivitätstypen in den letzten 180 Tagen.
Keine Kommentare:
Kommentar veröffentlichen