我正在使用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。是否有很好的方法吗?
答案 0 :(得分:3)
我建议ave
计算每NA
country
的数量,然后排除观察次数过少的所有行:
n <- ave(pd$gdp, pd$country, FUN=function(x)sum(!is.na(x)))
pd2 <- pd[n > 15, ]