在长(时间序列)数据中添加带有 NA 的缺失行

Add missing rows with NA in long (time series) data

假设我有一个不完整的 data.frame 长格式:

mydata <- data.frame(year = rep(c(2000,2001,2002,2004),
                                2),
                     team = factor(c("A","A","A","A",
                                     "B","B","B","B")),
                     score = c(8,1,3,1,2,3,7,2))

如您所见,缺少 year 2003 年的观察结果:

mydata

   year team score
 1 2000    A     8
 2 2001    A     1
 3 2002    A     3
 4 2004    A     1
 5 2000    B     2
 6 2001    B     3
 7 2002    B     7
 8 2004    B     2

有没有一种优雅的方法来添加缺失的行(在正确的位置)

我希望 team 变量填充所有可能的级别,score 填充 NA...

我更喜欢干净的 dplyr 解决方案,如果有 (-;

最后mydata应该是这样的:

   year team score
1  2000    A     8
2  2001    A     1
3  2002    A     3
4  2003    A    NA
5  2004    A     1
6  2000    B     2
7  2001    B     3
8  2002    B     7
9  2003    B    NA
10 2004    B     2

This expand.grid solution 几乎解决了问题,但我不知道如何将它应用到 data.frame 的长格式。

您可以使用 complete() 来自 tidyr:

library(tidyr)
library(dplyr)
mydata %>% group_by(team) %>% 
  complete(year = full_seq(year, 1))
 #1      A  2000     8
 #2      A  2001     1
 #3      A  2002     3
 #4      A  2003    NA
 #5      A  2004     1
 #6      B  2000     2
 #7      B  2001     3
 #8      B  2002     7
 #9      B  2003    NA
#10      B  2004     2