繁体   English   中英

在长(时间序列)数据中添加带有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变量充满所有可能的水平并用NA score ...

如果有一个(- dplyr我希望使用干净的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

这个expand.grid解决方案几乎解决了这个问题,但是我不知道如何将其以长格式应用于data.frame

您可以从tidyr使用complete()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM