Subset in R

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Subset in R

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Subset in R

Beitrag 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.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Subset in R

Beitrag von bigben »

---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Re: Subset in R

Beitrag 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.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Subset in R

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Subset in R

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Subset in R

Beitrag von bigben »

Hi Jörg,

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

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Subset in R

Beitrag 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
Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Re: Subset in R

Beitrag von Arthemisia »

Ja, es hat funktioniert mit %in% als Operator.
Danke für die Tipps.
Antworten