Hallo R2
Rnest2 hat geschrieben: ↑Sa Jan 30, 2021 3:08 pm
deine Fragen hatte ich bereits mit einem dreimaligen Ja beantwortet.
hatte ich vorher irgendwie überlesen - war wahrscheinlich zu knapp formuliert (dabei bin ich durchaus ein Freund von solchen knackigen Formulierungen). Bitte entschuldige, dass ich das 3* "ja" nich bemerkt habe.
Dein Code funzt wunderbar und ist schnell an einen neuen Schwellenwert bzw. Zeitpunkt nach Überschreitung angepasst.
Klasse, vielen Dank!!!
sehr schön.
Jetzt gibt es natürlich noch einige Sachen, die ich gerne verstehen möchte.
1) Bevorzugst du generell "fread" vor "read.csv" - ich habe vorhin deinen Code ausprobiert und das mit "read.csv" eingelesene dataframe "owid" hat R nicht gefunden. Fehlermeldung: "Fehler in `[.data.frame`(owid, total_cases_per_million > 10, .SD[1], : Objekt 'iso_code' nicht gefunden". Mit "fread" läufts.
sagen wir es mal so: ohne das Paket "data.table" läuft nichts, denn die Funktion fread() ist ein Teil von
data.table. Die Funktion kann nur gefunden werden, wenn das Paket geladen ist.
2) In der Funktion hätte ich jetzt angenommen, dass ".SD" sich auf das Datum bezieht, aber nach kurzem(!) Überfliegen der Dokumentation zum Package ‘data.table’, würde ich es laienhaft so ausdrücken, dass die Funktion den [1]. Wert nach Überschreitung "ausspuckt. Dies in diesem Fall zu dem was ich erreichen will, weil die Daten chronologisch geordnet sind. Richtig?
bezüglich .SD ist das dritte Argument in
[] wichtig:
Das dritte Argument gibt die Gruppierung vor. Nun ist
.SD der Platzhalter für einen Teil (entsprechend der Gruppierung) des ursprünglichen Datatable.
.SD[1] in data.table-Syntax bedeutet einfach die erste Zeile von
.SD
Alles zusammen:
* gruppiere nach iso_code
* nimm aus jedem Teil-Datatable die erste Zeile
... ach so - fast hätte ich es vergessen:
zuerst wirkt die Bedingung aus dem ersten Argument: also nimm nur die Zeilen, bei denen die Bedingung
total_cases_per_million>12 erfüllt ist.
Kennst Du SQL? -- es gibt gewisse Parallelen zu den drei Argumenten von
[] bei data.table
Vielleicht das Verwirrendste für jemanden, der data.table erstmalig in Aktion sieht:
das Paket bringt eigene Datentypen mit (die Objekte vom Typ
data.table) und definiert für diesen Datentyp die Funktion
`[`() neu, so dass
[] anders funktioniert als bei einem Dataframe.
3)OFFTOPIC EIne generelle Frage zum Datenmanagement in R. Ich verwende neben dem OWID-Datensatz noch folgende
https://github.com/OxCGRT/covid-policy- ... latest.csv
Von beiden Datensätzen habe ich noch Versionen aus dem September 2020, welche deutlich kleiner (weniger Variablen und Ausprägungen) sind. Beim mergen eines subsets beider Datensätze per
Code: Alles auswählen
datamerge <- merge(x=oxford_cut, y=owid_cut, all.x = TRUE, by.x = "iso_code",
by.y = "iso_code")
hat R ganz schön gerödelt. Weitere Bearbeitungsschritte haben nur noch verzögert erledigt werden können.. Hab das Programm dann per Task-Manager erlöst. Der MErge hat auch nicht korrekt funktioniert, aber das ist erstmal Nebensache. Eine später testweise exportierte CSV-Datei war über 2GB groß - der Export hat locker 10 minuten gedauert..
Für irgendwas hierzu würde ich mich über einen Kommentar oder links freuen, da ich neben den beiden Datensätze einn weiteren mit den UVs aller untersuchten Staaten erstellen und auch verknüpfen muss..
wichtig wäre erstmal, zu wissen, welcher Art das merge() ist:
m * n oder
1 * n oder
m * 1
Annahme Du hast zwei Tabellen zu merken (für Datenbankleute:
join)
Tabelle1: m1 Zeilen, n1 Spalten
Tabelle2: m2 Zeilen, n2 Spalten
Im schlimmsten Fall bekommt man beim join eine Tabelle mit
m1*m2 Zeilen und
(n1+n2-1) Spalten
Da bei Dir die eine Tabelle fast 70000 Zeilen hat, ist es angebracht, das Vorgehen gut zu überlegen. Gelegentlich kann man sich bei solchen Operationen recht dumm anstellen ... oder auch nicht.
Gruß, Jörg