GOOGLE ADS

Freitag, 29. April 2022

Kombinieren von Informationen in zwei Datenrahmen und Berechnen von Prozentsätzen im Laufe der Zeit

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 mydataIhre 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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...