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 angeben

Ich 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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage