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

时间:2018-01-23 13:32:48

标签: r dataframe dplyr na

假设我有一个不完整的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的长形式。

1 个答案:

答案 0 :(得分:1)

您可以使用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