3

我正在处理从 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。有没有很好的方法来做到这一点?

4

1 回答 1

4

我建议ave计算NAper的数量,country然后排除任何观察太少的行:

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

pd2 <- pd[n > 15, ]
于 2013-09-29T08:30:32.420 回答