2016-03-22 24 views
1

すべての期間にわたって有効な観測値を持たないすべての観測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))) 

今欠損値のない同じID1とID2との5年間の唯一の完全な観測が含まれているDFを生成したいと思います。 この例では、これはグループID1 = 520020内のサブグループID2 = 11にのみ適用されます。

誰も私が手動で行うことができないソリューションをお持ちですか?

答えて

0

このため、ID1とID2のすべてのユニークなペアをループしています。 NA値が見つかった場合、またはIDの一意のペアに十分な行がない場合、または問題のもの以外の年が存在する場合は、行が削除されました。

このコードでは、「年」または「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, ] 
    } 
    } 
} 
関連する問題