我想整理一个面板数据,排除所有观察到的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.
有没有人有一个不能让我手动完成的解决方案?
答案 0 :(得分:0)
为此,我已经遍历了每一对唯一的ID1和ID2。如果找到任何NA值,或者一对唯一的ID没有足够的行,或者存在除相关行之外的年份,则删除行。
请注意,此代码假定为&#34; year&#34;或&#34; t&#34;字段没有任何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, ]
}
}
}