R为数据框中的特定观察填充变量

时间:2015-08-21 23:18:46

标签: r dataframe

我有一些我想要过滤的数据(下载链接:http://spreadsheets.google.com/pub?key=0AkBd6lyS3EmpdFp2OENYMUVKWnY1dkJLRXAtYnI3UVE&output=xls)。我重新配置了数据,因此每个国家不是一行,而是每年一列,数据框的每一行都是国家年组合(即阿富汗,1960年,NA)。

既然我已经这样做了,我想创建一个初始数据的子集,排除任何有10年以上缺少避孕药使用数据的国家。

我曾想过在第二个数据框中创建一个唯一国家/地区名称列表,然后在该框架中添加一个变量,该变量包含每个国家/地区的行数,这些行具有避孕用途的NA(即对于阿富汗它会有46)。我的第一个想法(在VB.net中最流利)是使用for循环遍历各个国家,获取该国家的NA计数,然后用该值更新第二个数据框。

在那种情况下,我尝试了以下方法:

for(x in cl){
+   x$rc = nrow(subset(BCU, BCU$Country == x$Country))
+ } 

在失败之后,Googling再次向我提出了一个问题(忘记抓住链接),建议使用by()。基于此我试过:

by(cl, 1:nrow(cl), cl$rc <- nrow(subset(BCU, BCU$Country == cl$Country 
    & BCU$Contraceptive_Use == "NA")))

cl是列出国家/地区名称的第二个数据框,BCU是最初的避孕用途数据框)

我对R很新(我工作的问题是关于Udacity的R课程),所以我会坦然承认这可能不是最好的方法,但我&#39 ;我仍然很好奇如何进行这种聚合。

1 个答案:

答案 0 :(得分:1)

他们似乎都有> = 10年的数据缺失(除非我在某处错误估算):

library(tidyr)
library(dplyr)

dat <- read.csv("contraceptive use.csv", stringsAsFactors=FALSE, check.names=FALSE)
dat <- rename(gather(dat, year, value, -1), 
              country=`Contraceptive prevalence (% of women ages 15-49)`)

dat %>% 
  group_by(country) %>% 
  summarise(missing_count=sum(is.na(value))) %>% 
  arrange(desc(missing_count)) -> missing

sum(missing$missing_count >= 10)

## [1] 213

length(unique(dat$country))

## [1] 213