2015-08-21 2 views
0

У меня есть некоторые данные (ссылка для скачивания: http://spreadsheets.google.com/pub?key=0AkBd6lyS3EmpdFp2OENYMUVKWnY1dkJLRXAtYnI3UVE&output=xls), которые я пытаюсь фильтровать. Я переконфигурировал данные, так что вместо одной строки для каждой страны и одного столбца в год каждая строка кадра данных является комбинацией за год (т. Е. Афганистан, 1960, NA).R заполнить переменную для конкретного наблюдения в кадре данных

Теперь, когда я это сделал, я хочу создать подмножество исходных данных, которое исключает любую страну, у которой есть более 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 (задачи I «Я работаю для курса R на Udacity), поэтому я свободно признаю, что это не лучший подход, но мне все же интересно, как это сделать.

ответ

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 
Смежные вопросы