Seite 2 von 2

Re: Subset in R

Verfasst: Mi Jun 16, 2021 1:18 pm
von bigben
Hallo hitup,
h.itup hat geschrieben: Mi Jun 16, 2021 9:23 amMoin Bernhard,
das ist ganz lieb gemeint, aber ich habe den Eindruck, dass die elegantesten Antworten zu Zeitreihen-Zauberei hier speziell von Athomas kommen und die von Dir verwendeten Pakete würde ich hier im Forum am ehesten bei EDi im Gebrauch vermuten. Es macht also Sinn, die Frage möglichst inklusiv zu stellen und nicht gleich den Fünftbesten allein anzusprechen.

Dafür solltest Du zwei Dinge tun:
- Eröffne für Dein neues Problem einen neuen Thread
- Poste ein minimales reproduzierbares Datenbeispiel in R Code oder als CSV-Datei
Meine Datensatz ist ungefähr ähnlich wie der von KingErde.
Ich bin sicher, dass Dein Datensatz ausreichend unterschiedlich ist, dass er eine eigenen Thread verdient.

Sind das eigentlich immer die gleichen 9 Jahre, die da vorkommen, soll also immer über die Jahre 2012-2014 und über 2015 -2017 und über 2018-2020 zusammengefasst werden?

LG,
Bernhard

Re: Subset in R

Verfasst: Mi Jun 16, 2021 2:07 pm
von Athomas
ich habe den Eindruck, dass die elegantesten Antworten zu Zeitreihen-Zauberei hier speziell von Athomas kommen
Das ist so nicht richtig, aber Athomas nutzt auch in diesem Zusammenhang intensiv data.table - mit dem sich manchmal erstaunliche Dinge anstellen lassen :D ! Zudem ist er Traditionalist und lehnt die übermäßige Benutzung des tidyverse ab - darf hier also auch gerne exkludiert werden!
...und die von Dir verwendeten Pakete würde ich hier im Forum am ehesten bei EDi im Gebrauch vermuten.
Das sehe ich auch so, speziell bei lme4 ist EDi vermutlich der geeignete Ansprechpartner.

Re: Subset in R

Verfasst: Do Jun 17, 2021 8:06 am
von bigben

Re: Subset in R

Verfasst: So Sep 11, 2022 8:28 am
von Arthemisia
Hallo, ich habe ein Problem, das dazu passt:

Ich habe einen Datensatz mit 330729 Zeilen in 41 Spalten, und ich brauche nur die Datensätze mit IDs aus einer Liste mit 22 Einträgen.

Code: Alles auswählen

str (dataNSD)
Classes ‘data.table’ and 'data.frame':  330729 obs. of  41 variables:
 $ trackId  : chr  "GG_2016_D011" "GG_2016_D011" "GG_2016_D011" "GG_2016_D011" ...
 $ timestamp: POSIXct, format: "2016-06-06 12:00:35" "2016-06-06 12:32:37" ...
 $ coords_x1: num  8.35 8.35 8.35 8.35 8.35 ...
 $ coords_x2: num  52.5 52.5 52.5 52.5 52.5 ...
 $ [...]      (noch 37 weitere Variablen)

str (List_D)
'data.frame':   22 obs. of  1 variable:
 $ list_IDduemmer: chr  "GG_2016_D055" "GG_2016_D073" "GG_2016_D074" "GG_2016_D076" ... 
Jetzt möchte ich aus dataNSD die Zeilen herausfiltern, deren IDs in der Liste stehen. Mein Versuch dazu sieht so aus:

Code: Alles auswählen

data.Duemmer <- subset (dataNSD, trackId == c(List_D), select = c("trackId", "timestamp", "coords_x1", "coords_x2"))
Das Herausfiltern der gesuchten IDs funktioniert nicht, ich bekomme dann einen Datensatz mit 0 Zeilen, aber in 4 Spalten:

Code: Alles auswählen

str(data.Duemmer)
Classes ‘data.table’ and 'data.frame':  0 obs. of  4 variables:
 $ trackId  : chr 
 $ timestamp: 'POSIXct' num(0) 
 - attr(*, "tzone")= chr "UTC"
 $ coords_x1: num 
 $ coords_x2: num 
Ich finde beim googlen keine Antwort darauf, wie ich den Code statt dessen schreiben muss.

Re: Subset in R

Verfasst: So Sep 11, 2022 12:34 pm
von bigben
Hallo Arthemisia,

versuch bitte mal folgendes:

Code: Alles auswählen

data.Duemmer <- subset(dataNSD, trackId %in% List_D$list_IDduemmer, 
                       select = c("trackId", "timestamp", "coords_x1", "coords_x2"))
Du willst eigentlich keinen `==` vergleich, sondern einen `%in%` Abgleich und der Abgleich soll nicht mit dem ganzen Dataframe List_D erfolgen, sondern nur mit dem darin enthaltenen Vector list_IDduemmer.

Wenn das so nicht läuft, dann bitte gerne nochmal Beispieldaten hochladen, damit ich vorher ausprobieren kann, was ich poste.

Die Zeitvorteile von data.tables kannst Du wahrscheinlich nur ernten, wenn Du auf anstelle von subset alles über die eckigen Klammern regelst (vermute ich mal)

Code: Alles auswählen

data.Duemmer <- dataNSD[trackId %in% List_D$list_IDduemmer, c("trackId", "timestamp", "coords_x1", "coords_x2")]
(oder so ähnlich, ich verwende eigentlich nie data.frames. Vielleicht muss es auch ..(List_D$list_IDduemmer) heißen?) Aber eigentlich sollte das auf beiden Wegen kein Zeitproblem darstellen.

LG,
Bernhard

Re: Subset in R

Verfasst: Mo Sep 12, 2022 9:41 am
von jogo
Hallo Arthemisia,

die data.table-Lösung sollte etwa so aussehen:

Code: Alles auswählen

dataNSD[trackId %in% List_D$list_IDduemmer]
bzw.

Code: Alles auswählen

data.Duemmer <- dataNSD[trackId %in% List_D$list_IDduemmer]
vielleicht kann man es auch mit einem join erledigen. Das wäre dann mehr data.table-like aber nicht unbedingt schneller.

Gruß, Jörg

Re: Subset in R

Verfasst: Mo Sep 12, 2022 10:51 am
von bigben
Hi Jörg,

damit hast Du jetzt aber noch nicht die gewünschte Auswahl der Spalten umgesetzt?

LG, Bernhard

Re: Subset in R

Verfasst: Mo Sep 12, 2022 11:33 am
von jogo
Hallo Bernhard,

ja, das kommt in das zweite Argument von [.data.table
Ich habe jetzt eine Weile nicht mit data.table gearbeitet, deshalb garantiere ich auch nicht für den folgenden Code:

Code: Alles auswählen

dataNSD[trackId %in% List_D$list_IDduemmer, .(trackId, timestamp, coords_x1, coords_x2)]
Gruß, Jörg

Re: Subset in R

Verfasst: Mo Sep 12, 2022 7:27 pm
von Arthemisia
Ja, es hat funktioniert mit %in% als Operator.
Danke für die Tipps.