从面板数据集中清除缺失值
clean missing values from panel dataset
我想整理一个面板数据,排除所有观察到的 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。
有没有人有不让我手动执行此操作的解决方案?
为此,我遍历了每一对唯一的 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, ]
}
}
}
我想整理一个面板数据,排除所有观察到的 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。
有没有人有不让我手动执行此操作的解决方案?
为此,我遍历了每一对唯一的 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, ]
}
}
}