Aufeinanderfolgende Tage mit bestimmter Bedingung erkennen

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

Moderatoren: EDi, jogo

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

Re: Aufeinanderfolgende Tage mit bestimmter Bedingung erkennen

Beitrag von jogo »

Hier noch eine kleine Spielerei von mir mit base R:

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")
dat$Zahl <- c(0,0,2,5,3,0,0,2)

r <- rle(dat$Bedingung)
R <- as.data.frame(unclass(r))


r$values <- seq_along(r$lengths)
dat$rleid <- inverse.rle(r)
dat$lfdNr <- ave(dat$rleid, dat$rleid, FUN=seq_along)
dat$Zsum <- ave(dat$Zahl, dat$rleid, FUN=sum)

cbind(
subset(R, values=="Y"),
subset(dat, Bedingung=="Y" & lfdNr==1))
Nachtrag:
mit data.table kann das so aussehen:

Code: Alles auswählen

library("data.table")

dat <- structure(list(Zeile = 1:8, Datum = c("01.01.2011", "02.01.2011", 
 "03.01.2011", "04.01.2011", "05.01.2011", "06.01.2011", "07.01.2011", 
 "08.01.2011"), Bedingung = c("N", "N", "Y", "Y", "Y", "N", "N", "Y"), 
Zahl = c(0, 0, 2, 5, 3, 0, 0, 2)), row.names = c(NA, -8L), class = "data.frame")

setDT(dat)
dat2 <- dat[, i:=rleidv(Bedingung)][Bedingung=="Y"]
dat2[, ':='(Zsum=sum(Zahl), Dauer=.N), i][, .SD[1], i]
Gruß, Jörg
Antworten