2013-09-29 49 views
2

從1950年到2003年,我在180個國家使用了一個相當大的數據面板。我一直在使用R的plm包。我需要的一件事要做的是去掉國內生產總值觀察太少的國家,換句話說,太多的國民生產總值。這裏是什麼,我試圖做刪除PLM數據框中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有沒有一個很好的辦法做到這一點?

回答

2

我建議ave來算的NAcountry數,隨後與過少的觀測排除任何行:

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

pd2 <- pd[n > 15, ] 
+0

非常聰明的解決方案,謝謝! – crf