Zahlenreihen ergänzen (if-Schleife)
Zahlenreihen ergänzen (if-Schleife)
Hallo,
ich habe eine Tabelle mit Daten die zu verschiedenen Jahren aufgenommen wurden. Die Daten wurden jährlich erhoben, aber nur abgespeichert wenn Änderungen auftraten. Für die Auswertung brauche ich aber alle Jahre (auch die, die nicht in der Tabelle sind). (CSV im Anhang).
Meine Idee war, die Zeilen zu vergleichen und je nach Prüfungsergebnis die zu ergänzende Zeile einzufügen, indem das Vorjahr kopiert und die Jahreszahl eins hochgesetzt wird.
Bisher funktionert es allerdings nur über die rep()-Funktion die Zeile zu kopieren und ans Ende der Tabelle zu hängen, ohne das Jahr zu erhöhen.
if(testVariable$BaumID[x] == testVariable$BaumID[x+1] &
testVariable$Jahr[x]+1 == testVariable$Jahr[x+1] ) "YES" else (
c<-rbind(testVariable, rep(testVariable[x,1:10])))
Gibt es eine Möglichkeit, das Jahr zu erhöhen und dann nach ID und Jahr zu sortieren?
Vielen Dank für Eure Hilfe!
ich habe eine Tabelle mit Daten die zu verschiedenen Jahren aufgenommen wurden. Die Daten wurden jährlich erhoben, aber nur abgespeichert wenn Änderungen auftraten. Für die Auswertung brauche ich aber alle Jahre (auch die, die nicht in der Tabelle sind). (CSV im Anhang).
Meine Idee war, die Zeilen zu vergleichen und je nach Prüfungsergebnis die zu ergänzende Zeile einzufügen, indem das Vorjahr kopiert und die Jahreszahl eins hochgesetzt wird.
Bisher funktionert es allerdings nur über die rep()-Funktion die Zeile zu kopieren und ans Ende der Tabelle zu hängen, ohne das Jahr zu erhöhen.
if(testVariable$BaumID[x] == testVariable$BaumID[x+1] &
testVariable$Jahr[x]+1 == testVariable$Jahr[x+1] ) "YES" else (
c<-rbind(testVariable, rep(testVariable[x,1:10])))
Gibt es eine Möglichkeit, das Jahr zu erhöhen und dann nach ID und Jahr zu sortieren?
Vielen Dank für Eure Hilfe!
- Dateianhänge
-
- testVariable.CSV
- (1021 Bytes) 72-mal heruntergeladen
Re: Zahlenreihen ergänzen (if-Schleife)
Ist schon spät, deshalb kommt heute von mir nicht mehr viel. Google mal R in Verbindung mit locf. Das steht für last observation carried forward. Ich meine da vor langer Zeit mal nützliches gesehen zu haben. Hab das aber nie selbst genutzt.
Schönen Abend noch,
Bernhard
Schönen Abend noch,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Zahlenreihen ergänzen (if-Schleife)
http://if-schleife.de/
Ich würde das aus einer Kombination aus tidyr::expand (um auf die vollen jahre zu kommen, geht auch mit einem join...) und tidyr::fill (für das schon erwähnte locf) machen...
Ich würde das aus einer Kombination aus tidyr::expand (um auf die vollen jahre zu kommen, geht auch mit einem join...) und tidyr::fill (für das schon erwähnte locf) machen...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Zahlenreihen ergänzen (if-Schleife)
Hallo,
vielen Dank für die bisherigen Hinweise.
Das klingt von den Beschreibungen der Funktionen nach dem richtigen Weg. Nur habe ich bisher noch nicht die richtige Funktionseingabe herusgefunden, dass die Tabelle erweitert wird.
Die Tabelle ist folgend aufgebaut (verkürzt dargestellt):
Gibt es eine Funktionsbeschreibung zum Packet tidyr bzw zu der Funktion expand mit den "Unterfunktionen" in Deutsch?
Vielen Dank
vielen Dank für die bisherigen Hinweise.
Das klingt von den Beschreibungen der Funktionen nach dem richtigen Weg. Nur habe ich bisher noch nicht die richtige Funktionseingabe herusgefunden, dass die Tabelle erweitert wird.
Die Tabelle ist folgend aufgebaut (verkürzt dargestellt):
Dort soll jetzt für die Jahre 2012 und 13 der Messwert 1 ergänzt werden. In meinen bisherigen Versuchen mit expand() zählt mir die Funktion die auftretenden Kombination auf, ergänzt einige Kombinationen, die in der Originaltabelle enthalten sind, aber speichert die nicht ab, bzw ich finde die nicht.ID Jahr Messwert
1 2011 1
1 2014 2
Gibt es eine Funktionsbeschreibung zum Packet tidyr bzw zu der Funktion expand mit den "Unterfunktionen" in Deutsch?
Vielen Dank
Re: Zahlenreihen ergänzen (if-Schleife)
Guten Tag,
über die expand() kombiniert mit full_seq() [expand(testVariable, testVariable$BaumID, full_seq(testVariable$Jahr,1))] bekomme ich ein 'tibble' das jetzt soweit ich das überblicke die von mir erwünschten Kombinationen aus ID und Jahr enthält, also jede ID ist jedes Jahr vorhanden.
ABER
Wo speichert R das tibble und wie bekomme ich es dann in meine (Ursprungs-)Tabelle?
Vielen Dank vorab für Antworten und Hilfen
über die expand() kombiniert mit full_seq() [expand(testVariable, testVariable$BaumID, full_seq(testVariable$Jahr,1))] bekomme ich ein 'tibble' das jetzt soweit ich das überblicke die von mir erwünschten Kombinationen aus ID und Jahr enthält, also jede ID ist jedes Jahr vorhanden.
ABER
Wo speichert R das tibble und wie bekomme ich es dann in meine (Ursprungs-)Tabelle?
Vielen Dank vorab für Antworten und Hilfen
Re: Zahlenreihen ergänzen (if-Schleife)
Je nachdem was du haben willst und es R sagst:Wo speichert R das tibble?
Im workspace, auf der Festplatte, in googlesheets, in einer Datenbank,...
Für ersteres gibt es den "Assignment Operator"
Code: Alles auswählen
?`<-`
Code: Alles auswählen
1 + 2
x <- 1 + 2
x
Code: Alles auswählen
2 + 3
.Last.value
Das kann man z.b. mit einem "join" machen.und wie bekomme ich es dann in meine (Ursprungs-)Tabelle
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Zahlenreihen ergänzen (if-Schleife)
Hallo,
vielen Dank für die Hinweise und Hilfestellungen.
Ich habe meine Tabelle jetzt mit einer Kombi aus expand, join und fill zusammengesetzt bekommen. Mir fehlt jetzt nur noch ein letzter Schritt, den ich in der expand-Funktion vermute.
Für die einzelnen Bäume [$BaumID] gibt es unterschiedliche Ersterfassungen. Die expand-Funktion erweitert jedoch auf alle möglichen Kombinationen, so dass es am Ende Messwerte für Bäume vor deren Ersterfassung gibt, die sich über die fill-Funktion mit Daten des vorherigen Baumes füllen.
Wie kann ich meinen expand() entsprechend anpassen, dass für jede ID nicht vor dem ersten Jahr ergänzt wird?
Jens
vielen Dank für die Hinweise und Hilfestellungen.
ja, manchmal übersehe ich das einfachsteDas ist aber eine sehr grundlegende Frage zu R
Ich habe meine Tabelle jetzt mit einer Kombi aus expand, join und fill zusammengesetzt bekommen. Mir fehlt jetzt nur noch ein letzter Schritt, den ich in der expand-Funktion vermute.
Für die einzelnen Bäume [$BaumID] gibt es unterschiedliche Ersterfassungen. Die expand-Funktion erweitert jedoch auf alle möglichen Kombinationen, so dass es am Ende Messwerte für Bäume vor deren Ersterfassung gibt, die sich über die fill-Funktion mit Daten des vorherigen Baumes füllen.
Wie kann ich meinen expand() entsprechend anpassen, dass für jede ID nicht vor dem ersten Jahr ergänzt wird?
Vielen Dankexp <- expand(testVariable, testVariable$BaumID, testVariable$Jahr)
Jens
Re: Zahlenreihen ergänzen (if-Schleife)
Du kannst die doch auch danach wieder rauswerfen:
Für jeden Baum, behalte nur die Zeilen die größer als Erstdatum sind.
Oder halt den mix aus expand und fill pro baum anwenden (am besten dazu ein funktion schreiben).
Ohne ein reproduzierbares Beispiel kann ich aber leider auch nichts konkreteres sagen
Für jeden Baum, behalte nur die Zeilen die größer als Erstdatum sind.
Oder halt den mix aus expand und fill pro baum anwenden (am besten dazu ein funktion schreiben).
Ohne ein reproduzierbares Beispiel kann ich aber leider auch nichts konkreteres sagen
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Zahlenreihen ergänzen (if-Schleife)
Hallo, so sieht mein bisheriger Code aus, der die Tabelle einliest und ergänzt, könnte man sicherlich schöner gestallten, aber funktioniert soweit.
beigefügt ein kurzer Auszug aus der Gesamtdatei.
Im jetztigen Durchlauf, wird für Baum 2 die Jahre 2004 und 2006 erstellt die leer bleiben, allerdings entstehen für Baum 3 ebenfalls die Jahre 2004 und 2006, die mit den letzten Werten von Baum 2 gefüllt werden.
Eine Funktion zu schreiben klingt spannend, müsste dann aber vermutlich auch mit einer for-Schleife laufen, da bei 36.000 Bäumen das sehr aufwendig wäre für jeden einzelnen.
Ich hoffe, das Bespiel ist reproduzierbar, da ich mich über konkretes sehr freuen würde.
Grüße
Jens
Code: Alles auswählen
#Tabelle einlesen
testVariable <- read.csv("testVariable.CSV", header = TRUE, sep = ";", na.strings = "NA")
#erweitern
exp <- expand(testVariable, testVariable$BaumID, testVariable$Jahr)
#Erweiterungen an die Tabelle einfügen
join<-right_join(testVariable, exp, by = c("BaumID"="testVariable$BaumID", "Jahr"="testVariable$Jahr")
,copy = TRUE, keep= FALSE, na.strings="NA")
#Tabelle sortieren
joinord <- join[
order( join[,1], join[,5] ),
]
#Tabelle ergänzen
test <- joinord %>% fill(Vitalität, Stammumfang.cm, Kronendurchmesser.m,
Höhe.m, Entwicklungsphase, .direction = "down")
Im jetztigen Durchlauf, wird für Baum 2 die Jahre 2004 und 2006 erstellt die leer bleiben, allerdings entstehen für Baum 3 ebenfalls die Jahre 2004 und 2006, die mit den letzten Werten von Baum 2 gefüllt werden.
Dasklingt nach drop_na-Funktion kombiniert mit einer if-Abfrage innerhalb einer for-Schleife1?Für jeden Baum, behalte nur die Zeilen die größer als Erstdatum sind.
Eine Funktion zu schreiben klingt spannend, müsste dann aber vermutlich auch mit einer for-Schleife laufen, da bei 36.000 Bäumen das sehr aufwendig wäre für jeden einzelnen.
Ich hoffe, das Bespiel ist reproduzierbar, da ich mich über konkretes sehr freuen würde.
Grüße
Jens
Re: Zahlenreihen ergänzen (if-Schleife)
Guckst Du hier:
Aber Vorsicht, unter Einfluß von Drogen (Riesling) entstanden!
Code: Alles auswählen
library(data.table)
Eingabe <- file.choose()
Daten <- fread(Eingabe, sep=";",dec=",")
setkey(Daten, BaumID,Jahr)
Extrakt <- Daten[ , .(minJahr=min(Jahr), maxJahr=max(Jahr)), by=BaumID]
Jahre <- Extrakt[ , .(Jahr=(minJahr:maxJahr)), by=BaumID]
setkey(Jahre, BaumID,Jahr)
Ergebnis <- Daten[Jahre, roll=TRUE]