Data.table mit unterschiedlichen Ergebnissen

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

Moderatoren: EDi, jogo

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

Re: Data.table mit unterschiedlichen Ergebnissen

Beitrag 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
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Re: Data.table mit unterschiedlichen Ergebnissen

Beitrag 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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Data.table mit unterschiedlichen Ergebnissen

Beitrag 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
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Re: Data.table mit unterschiedlichen Ergebnissen

Beitrag 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
Antworten