Как развернуть большой фрейм данных в R
У меня есть датафрейм
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
Я хочу расширить его так, чтобы была каждая комбинация id и spp и иметьy = 0
для каждой комбинации, которая в данный момент отсутствует в кадре данных. Фрейм данных в настоящее время составляет около 100 000 строк и 15 столбцов. При расширении это будет около 300 000 столбцов (есть 17 уникальных значенийspp
в моем фактическом наборе данных).
Для каждого значенияid
date
то же самое (например, когда id = 2, дата всегда = 1985-08-01). В моем реальном наборе данных все столбцы, кромеspp
а такжеy
может быть указанid
.
Я хочу закончить с чем-то вроде:
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*
Укажите добавленные строкиВ будущем мне, вероятно, придется делать это с потенциально гораздо большими кадрами данных, поэтому быстрый, эффективный (время и память) способ сделать это будет оценен, но любое решение меня удовлетворит. Я полагаю, что должны быть способы использованияdplyr
, data.table
, или жеreshape
пакеты, но я не очень знаком с любым из них. Я не уверен, что будет проще развернуть только строки id, spp и y, а затем сделатьleft_join()
или жеmerge()
рекомбинировать дату (и все другие переменные в моем реальном кадре данных) на основеid
?