Aufeinanderfolgende Tage mit bestimmter Bedingung erkennen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Dodo
Beiträge: 8
Registriert: Fr Feb 15, 2019 8:00 pm

Aufeinanderfolgende Tage mit bestimmter Bedingung erkennen

Beitrag von Dodo » Fr Feb 15, 2019 8:25 pm

Hallo Liebe Forum-Community,
Ich verzweifle an folgender Aufgabe. Ich habe folgende Dataframe.

Code: Alles auswählen

        Datum Bedingung
1  01.01.2011         N
2  02.01.2011         N
3  03.01.2011         Y
4  04.01.2011         Y
5  05.01.2011         Y
6  06.01.2011         N
7  07.01.2011         N
8  08.01.2011         Y
usw....

Nun möchte ich gerne "Events" aus der Dataframe rauslesen. Ein Event ist, wenn bei mindestens 3 aufeinanderfolgenden Tage die Bedingung "Y" ist.
Ich würde gerne solche Events erkennen und jeweils den Start, das Ende und die Dauer des Events als Output haben. Leider kenne ich mich mit R noch nicht so gut aus und weiß nicht weiter. Ich habe einige Ansätze probiert, komme aber zu keinem Ergebnis.


Vielen Dank für eure Hilfe

mit freundlichen Grüßen

Dodo

jogo
Beiträge: 1115
Registriert: Fr Okt 07, 2016 8:25 am

Re: Aufeinanderfolgende Tage mit bestimmter Bedingung erkennen

Beitrag von jogo » Sa Feb 16, 2019 2:07 pm

Hallo Dodo,

willkommen im Forum!
Was hast Du denn bis jetzt probiert? Kannst Du uns das bitte zeigen?
(achte dabei auch auf die Formatierung von Code und Daten, siehe viewtopic.php?f=20&t=29 )
Ich bastel zur Zeit an einer Lösung unter Verwendung der Funktion rle()

Nachtrag (meine bisherige Bastelei):

Code: Alles auswählen

dat <- read.table(header=TRUE, stringsAsFactors = FALSE, text=
"Zeile Datum Bedingung
1 01.01.2011 N
2 02.01.2011 N
3 03.01.2011 Y
4 04.01.2011 Y
5 05.01.2011 Y
6 06.01.2011 N
7 07.01.2011 N
8 08.01.2011 Y")
r <- rle(dat$Bedingung)
R <- as.data.frame(unclass(r))
w <- which(R$values=="Y" & R$lengths>2)

cumsum(c(1, R$lengths))[w] # mit welchen Beobachtungen beginnen die Sequencen?
dat$Datum[cumsum(c(1, R$lengths))[w]] # Beginn
R$lengths[w] # wie lange dauern die gesuchten Sequenzen?
Gruß, Jörg

Dodo
Beiträge: 8
Registriert: Fr Feb 15, 2019 8:00 pm

Re: Aufeinanderfolgende Tage mit bestimmter Bedingung erkennen

Beitrag von Dodo » Sa Feb 16, 2019 4:11 pm

Hallo Jörg,
vielen Dank erstmal für deine Hilfe.
Leider kenne ich mich in R noch nicht so gut aus und ich kenne nicht viele Funktionen. Bisher habe ich versucht die Events über eine for-Schleife mit if/else Verzweigung zu finden.

Code: Alles auswählen

Daten <-read.table("Test.txt", header=TRUE)
Nummer <-data.frame(Nummer=1:length(Daten$Datum))
Datenn <-cbind(Daten, Nummer)


DatennurY <-subset(Datenn, Tag=="Y")
DatennurY


fkt <-function(Datum, Nummer) {
  Event <-matrix(nrow=length(Nummer))
  for (i in 1:length(Nummer)){
    if (Nummer[i]+1==Nummer[i+1]){
      if (Nummer[i+1]+1==Nummer[i+2]){
        Event[i] <-"Y"
        Event[i+1] <-"Y"
        Event[i+2] <-"Y" 
      }
    } else {
      Event[i] <-"N"
      if (Nummer[i+1]+1==Nummer[i+2]) {
        if (Nummer[i+2]+1==Nummer[i+3]) {
          Event[i+1] <-"Y"
          Event[i+2] <-"Y"
          Event[i+1] <-"Y"
        }
      } else {
        Event[i+1] <-"N"
        if (Nummer[i+2]+1==Nummer[i+3]) {
          if(Nummer[i+3]+1)==Nummer[i+4]{
            Event[i+2] <-"Y"
            Event[i+3] <-"Y"
            Event[i+3] <-"Y"
          }
        } else {
          Event[i+2] <-"N"
        }
      }
    }
  }
  return(data.frame(Datum=Datum, Nummer=Nummer, Event=Event))
}

jogo
Beiträge: 1115
Registriert: Fr Okt 07, 2016 8:25 am

Re: Aufeinanderfolgende Tage mit bestimmter Bedingung erkennen

Beitrag von jogo » Sa Feb 16, 2019 7:06 pm

Hallo Dodo,

warum gibst Du keinen Kommentar zu meinem Code?

Gruß, Jörg

Dodo
Beiträge: 8
Registriert: Fr Feb 15, 2019 8:00 pm

Re: Aufeinanderfolgende Tage mit bestimmter Bedingung erkennen

Beitrag von Dodo » Sa Feb 16, 2019 8:42 pm

Hallo Jörg,
ich konnte es grade eben erst ausprobieren. So funktioniert es ! vielen vielen Dank :)

jogo
Beiträge: 1115
Registriert: Fr Okt 07, 2016 8:25 am

Re: Aufeinanderfolgende Tage mit bestimmter Bedingung erkennen

Beitrag von jogo » So Feb 17, 2019 2:00 pm

prima.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast