【问题标题】:Add missing rows with NA in long (time series) data在长(时间序列)数据中添加带有 NA 的缺失行
【发布时间】:2018-01-23 13:32:48
【问题描述】:

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

【问题讨论】:

    标签: r dataframe dplyr na


    【解决方案1】:

    您可以从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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 2021-08-11
      • 2017-10-04
      • 2015-03-28
      相关资源
      最近更新 更多