So erweitern Sie einen großen Datenrahmen in R
Ich habe einen Datenrahmen
df <- data.frame(
id = c(1, 1, 1, 2, 2, 3, 3, 3, 3, 4),
date = c("1985-06-19", "1985-06-19", "1985-06-19", "1985-08-01",
"1985-08-01", "1990-06-19", "1990-06-19", "1990-06-19",
"1990-06-19", "2000-05-12"),
spp = c("a", "b", "c", "c", "d", "b", "c", "d", "a", "b"),
y = rpois(10, 5))
id date spp y
1 1 1985-06-19 a 6
2 1 1985-06-19 b 3
3 1 1985-06-19 c 7
4 2 1985-08-01 c 7
5 2 1985-08-01 d 6
6 3 1990-06-19 b 5
7 3 1990-06-19 c 4
8 3 1990-06-19 d 4
9 3 1990-06-19 a 6
10 4 2000-05-12 b 6
Ich möchte es so erweitern, dass es jede Kombination von id und spp gibt und haty = 0
für jede Kombination, die sich derzeit nicht im Datenrahmen befindet. Der Datenrahmen umfasst derzeit etwa 100.000 Zeilen und 15 Spalten. Wenn es erweitert wird, wären es ungefähr 300.000 Spalten (es gibt 17 eindeutige Werte vonspp
in meinem aktuellen Datensatz).
Für jeden Wert vonid
dasdate
ist dasselbe (z. B. wenn id = 2, Datum immer = 1985-08-01). In meinem realen Datensatz alle Spalten außerspp
undy
kann durch die angegeben werdenid
.
Ich möchte am Ende etwas haben wie:
id date spp y
1 1985-06-19 a 6
1 1985-06-19 b 3
1 1985-06-19 c 7
1 1985-06-19 d 0*
2 1985-08-01 a 0*
2 1985-08-01 b 0*
2 1985-08-01 c 7
2 1985-08-01 d 6
3 1990-06-19 b 5
3 1990-06-19 c 4
3 1990-06-19 d 4
3 1990-06-19 a 6
4 2000-05-12 a 0*
4 2000-05-12 b 6
4 2000-05-12 c 0*
4 2000-05-12 d 0*
Hinzugefügte Zeilen angebenIch werde dies wahrscheinlich in Zukunft mit potenziell viel größeren Datenrahmen tun müssen, daher wäre eine schnelle, effiziente (Zeit- und Speicher-) Möglichkeit, dies zu tun, wünschenswert, aber jede Lösung würde mich zufriedenstellen. Ich denke, es sollte Möglichkeiten geben, das zu verwendendplyr
, data.table
, oderreshape
Pakete, aber ich bin mit keinem von ihnen sehr vertraut. Ich bin mir nicht sicher, ob es am einfachsten wäre, nur die Zeilen id, spp und y zu erweitern. Dann mache aleft_join()
odermerge()
Datum (und alle anderen Variablen in meinem realen Datenrahmen) basierend auf neu kombinierenid
?