Seite 1 von 1

Hilfe beim Ereigniszählen

Verfasst: Mi Mai 09, 2018 12:09 pm
von Saturi
Hallo zusammen,

ich habe eine Problemstellung, die ich trotz intensiver Internet Recherche nicht lösen kann und wende mich deshalb an euch mit der Bitte um Hilfe:

ich habe folgende Datenstruktur:

AuftragsName / ErstellungsDatum / AbschlussDatum

ich möchte nun in einem Diagramm darstellen, wie viele Aufträge über einen Zeitraum gesehen gleichzeitig offen waren.
Vor verzweiflung habe ich schon versucht, das ganze über eine doppelte while Schleife laufen zu lassen, indem ich für die oben genannnte Liste pro Eintrag jeweils jedes Datum erstelle, in dem der Auftrag offen war, um nachher über die Gruppieren Funktion die Anzahl zu zählen, wie oft ein Datum existiert. Doppelte While Schleifen, in denen dann Reihen einer Tabelle hinzugefügt werden scheint aber die Rechenzeit zu sprengen und kommt daher für mich so nicht in Frage.

Ich hoffe ihr könnt mir einen besseren Weg (vermutlich ist es mal wieder ganz einfach) verraten, wie ich meine Problemstellung lösen kann.

vielen Dank.

lg.
Saturi

Re: Hilfe beim Ereigniszählen

Verfasst: Mi Mai 09, 2018 12:46 pm
von bigben
Die Rechenzeit zu sprengen? Wieviele Aufträge und was für Zeiträume sind das denn und wieviel Rechenzeit wäre erträglich?
Poste doch bitte mal Deinen Code und einen kleinen Ausschnitt von Deinem Datensatz.

LG,
Bernhard

Re: Hilfe beim Ereigniszählen

Verfasst: Mi Mai 09, 2018 3:13 pm
von Saturi
Hallo,

mir geht es hier nicht um Sekunden bei der Rechenzeit. Aber ich würde doch trotzdem gerne keine Stunden vor der Rechner verbringen, bis er fertig wird.

hier ein Beispiel. Hierbei handelt es sich um 100 Datensätze, was schon seine paar Sekunden Zeit braucht.
Ich arbeite später aber mit ca. 15000 Datensätzen. Ich bin mir sicher, dass es eine viel bessere Umsetzung gibt, als meine:

ich brauche den Vektor "AlleTage" auch nicht zwingend, mir würde auch eine Zusammenfassung reichen, in der jedes Datum nur einmal drin steht und in einer zweiten Spalte wie viele Aufträge dieses Datum einschließen

Code: Alles auswählen

library("dplyr")

start <- as.Date("2017/01/01")
ende <- as.Date("2017/12/31")
set.seed(1)

ZufallsWerte <- seq(start, ende, by = "days")[sample(100)]
MeineTabelle <- data.frame(Anfang = ZufallsWerte, Ende = ZufallsWerte + sample(100, 100))
MeineTabelle$Tage <- MeineTabelle$Ende - MeineTabelle$Anfang 
head(MeineTabelle)


AlleTage <-data.frame(c(1))
colnames(AlleTage)[1] <- "AlleTage" #Dummyeintrag, um die Spalte bennen zu können

i=1
while( i< nrow(MeineTabelle))
{
  j=0
  while(j<=MeineTabelle$Tage[i])
  {
    
    AlleTage <- add_row(AlleTage,AlleTage=toString(MeineTabelle$Anfang[i]+j))
    j=j+1
  }
  i=i+1
}

AlleTage <- data.frame(AlleTage[2:nrow(AlleTage),])  #löschen des Dummyeintrags

plot(AlleTage)
vielen Dank.

Re: Hilfe beim Ereigniszählen

Verfasst: Mi Mai 09, 2018 4:04 pm
von jogo
Hallo Saturi,

wie wär es mit:

Code: Alles auswählen

Tage <- min(MeineTabelle$Anfang):max(MeineTabelle$Ende)
events <- sapply(Tage, function(x) sum(MeineTabelle$Anfang<=x & x<=MeineTabelle$Ende))
plot(events ~ Tage)
(das Datumsformat muss man noch wieder gerade biegen)

Gruß, Jörg

Re: Hilfe beim Ereigniszählen

Verfasst: Mi Mai 09, 2018 7:10 pm
von Saturi
Danke!

genau danach hab ich gesucht... Die Apply Familie war das was ich brauche.
vielen Dank!

ich habe

Code: Alles auswählen

Tage <- min(MeineTabelle$Anfang):max(MeineTabelle$Ende)
noch in

Code: Alles auswählen

Tage <- seq(min(MeineTabelle$Anfang),max(MeineTabelle$Ende),by=1)
geändert und jetzt passts auch mit dem Datum.

Danke euch beiden!
lg.
Saturi

Re: Hilfe beim Ereigniszählen

Verfasst: Mi Mai 09, 2018 7:22 pm
von jogo
Wahrscheinlich kannst Du by=1 weglassen.

Gruß, Jörg