2016-03-22 2 views
1

Я хотел бы упорядочить данные панели, исключая все наблюдаемые идентификаторы, которые не имеют достоверных наблюдений в течение всех периодов.чистые отсутствующие значения из набора данных панели

В настоящее время у меня есть панель ФР, как:

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))) 

Теперь хотел бы генерировать ФР, который содержит только полные наблюдения 5 лет с одной и той же ID1 и ID2 без каких-либо недостающих значений. В этом примере это применимо только к подгруппе ID2 = 11 в группе ID1 = 520020.

У кого-нибудь есть решение, которое не заставляет меня делать это вручную?

ответ

0

Для этого я прошел через каждую уникальную пару ID1 и ID2. Если были найдены какие-либо значения NA или у уникальной пары идентификаторов не было достаточно строк, или были представлены годы, отличные от того, о котором идет речь, строки были удалены.

Имейте в виду, что этот код предполагает, что поле «год» или «t» не имеет дубликатов для любой пары идентификаторов.

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, ] 
    } 
    } 
} 
Смежные вопросы