Data.table mit unterschiedlichen Ergebnissen
-
- Beiträge: 76
- Registriert: Mo Jan 15, 2018 9:57 am
Data.table mit unterschiedlichen Ergebnissen
Hallo Zusammen,
ich hoffe auf die große Erfahrung von euch.
Ich habe ein recht kurioses Problem (aus meiner Sicht).
ich habe eine Funktion definiert, date_forecast
Führe ich die Funktion separat abhängig von der Variable V1 aus spukt es mir richtige Datum aus (das auch zu erwarten ist)
Führe ich allerdings folgenden Befehl aus:
Result<-Working.Data[,.(date_forecast(.SD)), by=V1]
kommen ganz andere Daten raus! Wie kann das sein?! Ist bei der Sortierung /Ordnung von V1 was durcheinander gekommen?
Bin komplett ratlos...
Besten Danke im Voraus!
ich hoffe auf die große Erfahrung von euch.
Ich habe ein recht kurioses Problem (aus meiner Sicht).
ich habe eine Funktion definiert, date_forecast
Führe ich die Funktion separat abhängig von der Variable V1 aus spukt es mir richtige Datum aus (das auch zu erwarten ist)
Führe ich allerdings folgenden Befehl aus:
Result<-Working.Data[,.(date_forecast(.SD)), by=V1]
kommen ganz andere Daten raus! Wie kann das sein?! Ist bei der Sortierung /Ordnung von V1 was durcheinander gekommen?
Bin komplett ratlos...
Besten Danke im Voraus!
Re: Data.table mit unterschiedlichen Ergebnissen
Die data.table-Variante hast Du uns gezeigt. Kannst Du uns auch diese erste Variante zeigen, damit wir sehen können, ob die Unterteilungen in Gruppen entsprechend der Variable $V1 in beiden Varianten in gleicher Weise verläuft.Regression hat geschrieben: ↑Fr Mär 02, 2018 11:02 am Führe ich die Funktion separat abhängig von der Variable V1 aus spukt es mir richtige Datum aus (das auch zu erwarten ist)
Eventuell wirst Du uns auch die Funktion date_forecast() zeigen müssen.
Und denke bitte daran, bei Deiner nächsten Nachricht Code-Stücke entsprechend zu formatieren
viewtopic.php?f=20&t=29
Gruß, Jörg
-
- Beiträge: 76
- Registriert: Mo Jan 15, 2018 9:57 am
Re: Data.table mit unterschiedlichen Ergebnissen
Gerne:
Sei:
V1[1]="AA" (Ist kein Code, sondern nur die Beispielhafte Ausgabe des ersten Eintrages)
bekommt man ein Datum was auch zu erwarten wäre.
Führt man aber die Funktion innerhalb einer data.table wie folgt aus:
Kommt an der ersten Stelle von V1[1] ebenfalls Kategorie "AA" vor aber das Datum stimmt nicht überein.
UUUUND:
Hier kommen wieder die Daten die auch mit Test_Date übereinstimmen
Ich hoffe es ist etwas verständlicher geworden.
Besten Dank!
Sei:
V1[1]="AA" (Ist kein Code, sondern nur die Beispielhafte Ausgabe des ersten Eintrages)
Code: Alles auswählen
Test_Satz<-Working.Data[V1=="AA"]
Test_Date<-date_forecast(Test_Satz)
Führt man aber die Funktion innerhalb einer data.table wie folgt aus:
Code: Alles auswählen
Result<-Working.Data[,.(date_forecast(.SD)), by=V1]
UUUUND:
Code: Alles auswählen
Date_Forecast<-by(Working.Data, list(Working.Data$V1), FUN=function(X) c(date=date_forecast(X), TRUE))
Ich hoffe es ist etwas verständlicher geworden.
Besten Dank!
Re: Data.table mit unterschiedlichen Ergebnissen
Hallo Regression,
momentan sehe ich nicht, woran es liegen könnte.
Wenn das Phänomen reproduzieren könnte, könnte ich dazu mehr sagen.
Ansonsten nur der allgemeine Ratschlag:
1. die R-Session beenden und R neu starten
2. keine überflüssigen Objekte generieren.
Gruß, Jörg
momentan sehe ich nicht, woran es liegen könnte.
Wenn das Phänomen reproduzieren könnte, könnte ich dazu mehr sagen.
Ansonsten nur der allgemeine Ratschlag:
1. die R-Session beenden und R neu starten
2. keine überflüssigen Objekte generieren.
Gruß, Jörg
-
- Beiträge: 76
- Registriert: Mo Jan 15, 2018 9:57 am
Re: Data.table mit unterschiedlichen Ergebnissen
Restart hat leider nicht geholfen...
Anbei füge ich mal einen Beispiel_Satz ein.
hier ist meine etwas umfangreichere Funktion:
Hoffe es ist kein Overkill jetzt... bin wirklich verzweifelt:
bekomme ich den 09.09.2018 raus
Mit
erhalte ich "insufficient Data".
Anbei füge ich mal einen Beispiel_Satz ein.
hier ist meine etwas umfangreichere Funktion:
Code: Alles auswählen
date_forecast<-function(Main.Data,Level_alert=10){
Main.Data<-Main.Data[!duplicated(Date)]
Level_diff<-diff(Main.Data$Level)
Level_diff<-c(0,Level_diff) # Längen anpassung
Test<-data.frame(Main.Data,Level_diff)
Flanken<-data.frame(Test[Test$Level_diff>0,])
Flanken<-Flanken[Flanken$Level>60,]
temp<-c()
t<-Main.Data$Date
zeilen<-which(t==Flanken$Date[1])
if(length(Flanken$Date)>1){
for (i in 2:length(Flanken$Date)) {
temp<-which(t==Flanken$Date[i])
if((temp[1]-zeilen[length(zeilen)])>15){
zeilen<-c(zeilen, temp)
}else{next}
}}
if(length(zeilen)<1 & length(Main.Data$Level)>=10){
lm1.model<- lm(Main.Data$Date~Main.Data$Level)
level_al<-lm1.model$coefficients[1]+(Level_alert*lm1.model$coefficients[2])
forecast_alert<-as.Date(level_al,origin = "1970-01-01")
}
else{forecast_alert<-"insufficient Data"}
if(length(zeilen)>0){
last_flanc<-Main.Data[last(zeilen):length(Main.Data$V1),]
if(length(last_flanc$V1)>=10){
lm1.model<- lm(last_flanc$Date~last_flanc$Level)
level_al<-lm1.model$coefficients[1]+(Level_alert*lm1.model$coefficients[2])
forecast_alert<-as.Date(level_al,origin = "1970-01-01")
}else{forecast_alert<-"insufficient Data"}
}
forecast_alert<-as.character(forecast_alert)
return(forecast_alert)
}
Code: Alles auswählen
satz<-Example_Set[V1=="00353874-129C-4FFB-AC0E-B24F7E245118"]
date_forecast(satz)
Mit
Code: Alles auswählen
Example_set[,.(date_forecast(.SD)), by=.(V1)]
Re: Data.table mit unterschiedlichen Ergebnissen
Kannst Du bitte zeigen, wie die Exceltabelle eingelesen wird. Da gibt es sehr verschiedenen Möglichkeiten ...
Die Funktion ist ja schon ein ganz schöner Hammer.
Gruß, Jörg
Die Funktion ist ja schon ein ganz schöner Hammer.
Gruß, Jörg
-
- Beiträge: 76
- Registriert: Mo Jan 15, 2018 9:57 am
Re: Data.table mit unterschiedlichen Ergebnissen
Ja Ich weiß...
es geht bestimmt eleganter...
Nur weiß ich noch nicht wie...
Im Prinzip soll das Datum für den Datensatz ab der letzten Flanke vorausgesagt werden, wann der Level 10 erreicht wird. Wenn es noch keine gibt dann eben aus dem aktuellen Datensatz, darauf wird geachtet, dass eben die Flanke groß genug ist also ab Level 60, und genügend Abmessungen vorhanden sind.
Ich arbeite mit RStudio da ist es ganz einfach ("per Mausklick"):
Code: Alles auswählen
library(readxl)
Example_Set <- read_excel("Example_Set.xlsx")
View(Example_Set)
Re: Data.table mit unterschiedlichen Ergebnissen
Das liegt nicht an RStudio, sondern an dem verwendeten Paket readxlRegression hat geschrieben: ↑Fr Mär 02, 2018 3:38 pm Ich arbeite mit RStudio da ist es ganz einfach ("per Mausklick"):Code: Alles auswählen
library(readxl) Example_Set <- read_excel("Example_Set.xlsx") View(Example_Set)
Ich bin bis jetzt soweit:
Code: Alles auswählen
library("readxl")
Example_Set <- read_excel("Example_Set.xlsx")
library("data.table")
setDT(Example_Set)
# ...
satz<-Example_Set[V1=="00353874-129C-4FFB-AC0E-B24F7E245118"]
date_forecast(satz)
# > date_forecast(satz)
# (Intercept)
# "4208772-10-23"
Nachtrag:
ich schaue mir schon mal Deine Funktion an. Mir fällt auf, dass Du auf dem übergebenem Datatable-Objekt arbeitest ...
Ich vermute, Du musst es vor solchen Aktionen kopieren, weil bei Datatable-Objekten viel per reference gearbeitet wird.
Was mich besonders verwirrt:
1. Scheinbar nimmst Du einige Spalten aus der Tabelle raus, manipulierst diese und verwendest das Ergebnis, um die übergebene Tabelle zu indizieren.
2. Du verwendest data.table-Objekte, aber viele Zugriffe sind eher wie bei Dataframes.
Gruß, Jörg
-
- Beiträge: 76
- Registriert: Mo Jan 15, 2018 9:57 am
Re: Data.table mit unterschiedlichen Ergebnissen
hmm... hab eigentlich nur variablen Namen geändert, aber es kommt was anderes raus
Muss wohl Montag nach dem Fehler weiter suchen...
Können wir unser Diskus am Montag fortsetzten?
Und Besten Dank schon mal für die investierte Zeit!
Großes Lob!
Muss wohl Montag nach dem Fehler weiter suchen...
Können wir unser Diskus am Montag fortsetzten?
Und Besten Dank schon mal für die investierte Zeit!
Großes Lob!
-
- Beiträge: 76
- Registriert: Mo Jan 15, 2018 9:57 am
Re: Data.table mit unterschiedlichen Ergebnissen
Hört sich nach einem Ansatzpunk an... Danke schon mal!