删除PLM数据帧中NA值太多的行

时间:2013-09-29 08:19:59

标签: r plm

我正在使用1950年至2003年的180个国家的大量数据小组。我一直在使用r中的plm软件包。我需要做的一件事是删除GDP观察太少的国家,或者换句话说,NA太多了。这是我想要做的一个虚拟的例子

## generate dummy data
library(plm)
c1 <- rep(NA,20)
c2 <- rep(c(1,NA),10)
c3 <- c(1:15,NA,NA,NA,NA,NA)
c4 <- c(NA,1:19)
c5 <- c(1:20)
country <- c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20))
year <- rep(1:20,5)
df <- data.frame(year, country, gdp=c(c1,c2,c3,c4,c5))
pd <- pdata.frame(df,index=c("country","year"))

然后,我生成了一个向量,计算每个国家/地区的GDP观察数量,如下所示

gdp.observations <- apply(as.matrix(pd$gdp),1,
                          function(x) length(is.na(x)[is.na(x)==FALSE]))

生成向量

> gdp.observations
 A  B  C  D  E 
 0 10 15 19 20 

我现在要做的是使用此向量制作pdata.frame,其中仅包含gdp.observations超过某个阈值的国家/地区 - 例如,15。是否有很好的方法吗?

1 个答案:

答案 0 :(得分:3)

我建议ave计算每NA country的数量,然后排除观察次数过少的所有行:

n <- ave(pd$gdp, pd$country, FUN=function(x)sum(!is.na(x)))

pd2 <- pd[n > 15, ]