Seite 4 von 4

Re: Data.table mit unterschiedlichen Ergebnissen

Verfasst: Do Mär 08, 2018 3:44 pm
von jogo
Hallo Regression,

wenn man eine Klausel by=... hat, sind die dort aufgeführten Spalten nicht in .SD enthalten :!:

Code: Alles auswählen

library("data.table")
library("readxl")
Example_Set <- read_excel("Example_Set.xlsx")
setDT(Example_Set)

Gruppen <- Example_Set[, unique(V1)]
Example_Set[, Level_diff := Level - shift(Level), V1]
Example_Set[, z:=rleidv(Level_diff>0), V1]
Example_Set[, Zykl := (z+1) %/% 2]

Example_Set[, .(.N, m=max(Level)), by=.(V1, Zykl, z)]
# Example_Set[V1==Gruppen[5]]
# Example_Set[V1==Gruppen[7]]
# Gruppen

whichZykl <- function(Gruppe) {
  Z <- Gruppe[, .(.N, m=max(Level)), by=.(Zykl, z)]
  if (Z[, .N] %% 2) Z <- tail(Z, -1)
  Z[m>=60, last(Zykl)]
}

date_forecast<-function(Gruppe, Level_alert=10) {
  regData <- Gruppe[Zykl==whichZykl(Gruppe)]
  if (regData[, .N] < 10) return("insufficient Data")
  
  lm1.model <- lm(Date ~ Level, data=regData)
  D <- predict.lm(lm1.model, newdata = data.frame(Level=10))
  as.character(as.POSIXct(D, origin="1970-01-01"))
}

Example_Set[, date_forecast(.SD), by=V1]
Example_Set[, head(.SD,1), by=.(V1, Zykl)]
Example_Set[, tail(.SD,1), by=.(V1, Zykl)]

#######################

ZyklDauer <- function(ZyklData) {
  lm1.model <- lm(Date ~ Level, data=ZyklData)
  
  D <- predict.lm(lm1.model, newdata = data.frame(Level=c(100, 0)))
  D <- as.POSIXct(D, origin="1970-01-01")
  return(list(D100=D[1], D000=D[2], n=ZyklData[, .N]))
}

D <- Example_Set[, ZyklDauer(.SD), by=.(V1, Zykl)]
D[, Dauer := D000-D100]
D[n>=10, .(medDauer=median(Dauer)), V1]

########################

plot_last_flanc<-function(Gruppe) {
  regData <- Gruppe[Zykl==whichZykl(Gruppe)]
  
  lm1.model <- lm(Date ~ Level, data=regData)
  plot(Date ~ Level, data=regData)
  abline(lm1.model, col="red")
}

Example_Set[V1==Gruppen[7], { plot_last_flanc(.SD); title(main=first(V1)) }, by=V1]
ich habe hier wieder meine neue Konstruktion der Zyklennummern verwendet.

Gruß, Jörg

Re: Data.table mit unterschiedlichen Ergebnissen

Verfasst: Do Mär 08, 2018 4:17 pm
von Regression
läuft leider nicht bei mir:
Error in eval(bysub, x, parent.frame()) : object 'z' not found
Called from: eval(bysub, x, parent.frame())


und ich verstehe nicht, warum Du in:

Code: Alles auswählen

Example_Set[V1==Gruppen[7], { plot_last_flanc(.SD); title(main=first(V1)) }, by=V1]
"[V1==Gruppen[7],...] " verwendest... es sollen ja alle Gruppen geplottet werden nicht nur eine

Re: Data.table mit unterschiedlichen Ergebnissen

Verfasst: Do Mär 08, 2018 4:29 pm
von jogo
Regression hat geschrieben: Do Mär 08, 2018 4:17 pm läuft leider nicht bei mir:
Error in eval(bysub, x, parent.frame()) : object 'z' not found
Called from: eval(bysub, x, parent.frame())
Dann hast Du meinen Quelltext nicht vollständig abgearbeitet (vollständig bedeutet von vorne an).
Du solltest Dir den Quelltext auch durchlesen (ihn durcharbeiten), um ihn zu verstehen.
und ich verstehe nicht, warum Du in:

Code: Alles auswählen

Example_Set[V1==Gruppen[7], { plot_last_flanc(.SD); title(main=first(V1)) }, by=V1]
"[V1==Gruppen[7],...] " verwendest... es sollen ja alle Gruppen geplottet werden nicht nur eine
funktioniert:

Code: Alles auswählen

Example_Set[, { plot_last_flanc(.SD); title(main=first(V1)) }, by=V1]
aber:
wenn Du kein Ausgabedevice verwendest, das Seitenumbrüche zulässt, dann wirst Du nur den letzten Plot sehen.
Bitte mal die Grafikparameter mfcol= und mfrow= anschauen oder ein Ausgabedevice mit Seitenumbruch verwenden, z.B. PDF.

Gruß, Jörg

Re: Data.table mit unterschiedlichen Ergebnissen

Verfasst: Fr Mär 09, 2018 11:18 am
von Regression
jogo hat geschrieben: Do Mär 08, 2018 4:29 pm
Regression hat geschrieben: Do Mär 08, 2018 4:17 pm läuft leider nicht bei mir:
Error in eval(bysub, x, parent.frame()) : object 'z' not found
Called from: eval(bysub, x, parent.frame())
Dann hast Du meinen Quelltext nicht vollständig abgearbeitet (vollständig bedeutet von vorne an).
Du solltest Dir den Quelltext auch durchlesen (ihn durcharbeiten), um ihn zu verstehen.
und ich verstehe nicht, warum Du in:

Code: Alles auswählen

Example_Set[V1==Gruppen[7], { plot_last_flanc(.SD); title(main=first(V1)) }, by=V1]
"[V1==Gruppen[7],...] " verwendest... es sollen ja alle Gruppen geplottet werden nicht nur eine
funktioniert:

Code: Alles auswählen

Example_Set[, { plot_last_flanc(.SD); title(main=first(V1)) }, by=V1]
aber:
wenn Du kein Ausgabedevice verwendest, dass Seitenumbrüche zulässt, dann wirst Du nur den letzten Plot sehen.
Bitte mal die Grafikparameter mfcol= und mfrow= anschauen oder ein Ausgabedevice mit Seitenumbruch verwenden, z.B. PDF.

Gruß, Jörg
ok, danke für deine Tipps !
LG
Regression