У меня есть датафрейм
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
?