【问题标题】:clean missing values from panel dataset从面板数据集中清除缺失值
【发布时间】:2016-03-22 00:39:08
【问题描述】:

我想整理一个面板数据,排除所有观察到的 ID,这些 ID 在所有时期都没有有效观察。

目前我有一个面板 df,例如:

dt <- data.frame(ID1=c(rep(520020,5),rep(520030,3),rep(520040,5),rep(520050,2),rep(520060,5)),
             ID2=c(rep(11,5),rep(12,3),14,15,rep(13,2),17,16,16,rep(14,4),20),
             t=c(rep(2014:2010,4)),
             var1=c(runif(n = 5, min = 1, max = 10),NA,NA,NA,runif(n = 12, min = 1, max = 10)),
             var2=c(runif(n = 17, min = 1, max = 10),NA,runif(n = 2, min = 1, max = 10)))

现在想生成一个 df,其中仅包含 5 年的完整观测值,具有相同的 ID1 和 ID2,没有任何缺失值。 在本例中,这只适用于组 ID1=520020 中的子组 ID2=11。

有没有人可以不让我手动操作的解决方案?

【问题讨论】:

    标签: r panel-data


    【解决方案1】:

    为此,我遍历了每一对唯一的 ID1 和 ID2。如果发现任何 NA 值,或者一对唯一 ID 没有足够的行,或者存在与所讨论的年份不同的年份,则将删除这些行。

    请记住,此代码假定“year”或“t”字段没有任何 ID 对的重复项。

    startYear <- 2010
    endYear <- 2014
    
    for( i in unique(dt$ID1)){
      for( j in unique(dt$ID2[dt$ID1 == i])){
    
        hasNA <- any(is.na(dt[dt$ID1 == i & dt$ID2 == j, ]))
    
        if(nrow(dt[dt$ID1 == i & dt$ID2 == j, ]) != (endYear - startYear + 1)){
          isIncomplete <- TRUE
        } else if ( !all(dt$t[dt$ID1 == i & dt$ID2 == j] %in% startYear:endYear) ) {
          isIncomplete <- TRUE 
        } else {
          isIncomplete <- FALSE
        }
    
        if( hasNA | isIncomplete ){
        dt <- dt[dt$ID1 != i | dt$ID2 != j, ]
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 2018-10-02
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      相关资源
      最近更新 更多