.SD Blockade lösen

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

Moderatoren: EDi, jogo

Regression
Beiträge: 70
Registriert: Mo Jan 15, 2018 9:57 am

Re: .SD Blockade lösen

Beitrag von Regression » Fr Sep 14, 2018 3:13 pm

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!

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

Re: .SD Blockade lösen

Beitrag von jogo » Fr Sep 14, 2018 3:38 pm

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

Regression
Beiträge: 70
Registriert: Mo Jan 15, 2018 9:57 am

Re: .SD Blockade lösen

Beitrag von Regression » Fr Sep 14, 2018 3:49 pm

Sehr schön!
Ich danke Dir!!!
-----
EDIT: die #2Variante tut exakt das gewünschte :mrgreen:

Regression
Beiträge: 70
Registriert: Mo Jan 15, 2018 9:57 am

Re: .SD Blockade lösen

Beitrag von Regression » Fr Sep 14, 2018 3:56 pm

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*

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

Re: .SD Blockade lösen

Beitrag von jogo » Fr Sep 14, 2018 3:58 pm

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

Regression
Beiträge: 70
Registriert: Mo Jan 15, 2018 9:57 am

Re: .SD Blockade lösen

Beitrag von Regression » 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 :/

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

Re: .SD Blockade lösen

Beitrag von jogo » Fr Sep 14, 2018 4:18 pm

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

Regression
Beiträge: 70
Registriert: Mo Jan 15, 2018 9:57 am

Re: .SD Blockade lösen

Beitrag von Regression » Mo Sep 17, 2018 8:40 am

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

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

Re: .SD Blockade lösen

Beitrag von jogo » Mo Sep 17, 2018 9:16 am

Hallo Regression,

Code: Alles auswählen

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

Regression
Beiträge: 70
Registriert: Mo Jan 15, 2018 9:57 am

Re: .SD Blockade lösen

Beitrag von Regression » Mo Sep 17, 2018 9:23 am

Jap, perfekt :!:

Danke!

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast