Seite 2 von 2

Re: .SD Blockade lösen

Verfasst: Fr Sep 14, 2018 3:13 pm
von Regression
dt[, { print(.BY); ffdel(.SD)[, .N]}, .(Zykl, ID)]
Das hat mir sehr weiter geholfen!

hier ist das analoge Beispiel-Datensatz:

Code: Alles auswählen

dt<-data.table(Level=c(61:19,3,3,rep(2,3),1,1,3,3,2,2,2,1,1,1,0,0,99:34), Zykl=c(rep(1,60),rep(2,66)), ID=c(rep(1,126)))
Die Außreißer sind "zu klein"... Diesen Fall hatte ich noch nie gesehen. Wäre schön auch solche kleinen Außreißer zu eliminieren, allerdings
tuen mir diese nicht wirklich weh.

Danke vorab!

Re: .SD Blockade lösen

Verfasst: Fr Sep 14, 2018 3:38 pm
von jogo
Hier mal meine Bastelei zu dem Thema:

Code: Alles auswählen

ffdel <- function(M) {
  up <- M[, Level<shift(Level, type="lead")]
  if (!any(up, na.rm=TRUE)) return(M)
  anfang <- 1+which(up)
  w <- M[, which(Level>90 &  shift(Level, type="lead")<10)]
  if (length(w)==0) return(M)  ### Variante 1 
  if (length(w)==0) ende <- M[, .N] else ende <- w  ### Variante 2 ab hier
  M[-(anfang:ende)]
}

dt[, { print(.BY); ffdel(.SD)[, .N]}, .(Zykl, ID)]
Mehr Diagnose gefällig?

Code: Alles auswählen

dt[, .(.N, L1=Level[1], Lmax=max(Level), Dmax=max(diff(Level)), Dmin=min(diff(Level))), .(Zykl, ID)]
Gruß, Jörg

Re: .SD Blockade lösen

Verfasst: Fr Sep 14, 2018 3:49 pm
von Regression
Sehr schön!
Ich danke Dir!!!
-----
EDIT: die #2Variante tut exakt das gewünschte :mrgreen:

Re: .SD Blockade lösen

Verfasst: Fr Sep 14, 2018 3:56 pm
von Regression
Mehr Diagnose gefällig?

Code: Alles auswählen
dt[, .(.N, L1=Level[1], Lmax=max(Level), Dmax=max(diff(Level)), Dmin=min(diff(Level))), .(Zykl, ID)]
*ThumbUp*

Re: .SD Blockade lösen

Verfasst: Fr Sep 14, 2018 3:58 pm
von jogo
Die zweite Variante kann man noch etwas gefälliger gestalten:

Code: Alles auswählen

ffdel <- function(M) {
  up <- M[, Level<shift(Level, type="lead")]
  if (!any(up, na.rm=TRUE)) return(M)
  anfang <- 1+which(up)
  ende <- M[, which(Level>90 &  shift(Level, type="lead")<10)]
  if (length(ende)==0) ende <- M[, .N]
  M[-(anfang:ende)]
}
Gruß, Jörg

Re: .SD Blockade lösen

Verfasst: Fr Sep 14, 2018 4:13 pm
von Regression
Oh ich habe übersehen, dass die #2 Variante auch die letzten Datensätze abschneidet, also die Nullen :o
diese sind für mich essentiell :/

Re: .SD Blockade lösen

Verfasst: Fr Sep 14, 2018 4:18 pm
von jogo
Regression hat geschrieben: Fr Sep 14, 2018 4:13 pm Oh ich habe übersehen, dass die #2 Variante auch die letzten Datensätze abschneidet, also die Nullen :o
diese sind für mich essentiell :/
Ja, Variante 2 ist recht radikal: vom Beginn der Flanke an wird alles Nachfolgende abgeschnitten.
Sollen die Zeilen, in denen Level den Wert 0 hat, erhalten bleiben? oder noch mehr?

Code: Alles auswählen

ffdel <- function(M) {
  up <- M[, Level<shift(Level, type="lead")]
  if (!any(up, na.rm=TRUE)) return(M)
  anfang <- 1+which(up)
  ende <- M[, which(Level>90 &  shift(Level, type="lead")<10)]
  if (length(ende)==0) ende <- M[, which(Level==0)[1]] - 1
  M[-(anfang:ende)]
}
Gruß, Jörg

Re: .SD Blockade lösen

Verfasst: Mo Sep 17, 2018 8:40 am
von Regression
Hallo Jörg,

mir ist grade der letzte Datensatz wichtig, also, wann der Lebenszyklus zuende ist wichtig.
Dieser Endet nicht notwendigerweise mt einer Null.

LG

Re: .SD Blockade lösen

Verfasst: Mo Sep 17, 2018 9:16 am
von jogo
Hallo Regression,

Code: Alles auswählen

if (length(ende)==0) ende <- M[, .N] - 1
Gruß, Jörg

Re: .SD Blockade lösen

Verfasst: Mo Sep 17, 2018 9:23 am
von Regression
Jap, perfekt :!:

Danke!