Хотя этот вопрос был помечен как дубликат group by
, используемый здесь, на самом деле здесь не нужен.Также мы добавили зоопарк и несколько базовых ответов.
1) завершено (тидыр) complete
в тидыре:
library(tidyr)
complete(DF, week, id)
давая:
# A tibble: 9 x 3
week id x
<int> <int> <int>
1 1 12 126
2 1 13 166
3 1 14 129
4 2 12 128
5 2 13 NA
6 2 14 NA
7 3 12 136
8 3 13 120
9 3 14 115
2) read.zoo / fortify.zoo (zoo) Создание разбиения объекта зоопарка на неделю, а затем преобразование его обратно в data.frame с использованием melt=TRUE
:
library(zoo)
z <- read.zoo(DF, index = "id", split = "week")
fortify.zoo(z, melt = TRUE, names = names(DF)[c(2:1, 3)])
предоставление:
id week x
1 12 1 126
2 13 1 166
3 14 1 129
4 12 2 128
5 13 2 NA
6 14 2 NA
7 12 3 136
8 13 3 120
9 14 3 115
3) изменить форму (основание) изменить на широкую форму и затем вернуться к длинной форме:
wide <- reshape(DF, idvar = "week", timevar = "id", dir = "wide")
long <- reshape(wide, dir = "long")
names(long) <- names(DF)
4)tapply / as.data.frame.table (base)
as.data.frame.table(tapply(DF[[3]], DF[-3], c), responseName = names(DF)[3])
5) expand.grid / merge (base)
with(DF, merge(expand.grid(week = unique(week), id = unique(id)), DF, all = TRUE))