2016-12-15 2 views
0

У меня есть две переменные «c» и «q» в data.frame. «c» - это число от нуля до единицы (уровень бедности), а «q» указывают, является ли домашнее хозяйство (или субъект) бедным с 1 или без бедности с нулем. Как рассчитать среднее значение «c» только для бедных домохозяйств (q = 1).для подмножеств с использованием опроса

What I need

Важная деталь: У меня есть база данных для деревенского и я хочу этот результат для регионов. Я использую svyby так:

svyby(~q , ~region , design = base2015_pos , na.rm=TRUE, svytotal)

так что таким образом R дать мне число бедных в регионе и мне не нужно это сейчас. Мне нужно среднее подмножество (см. Изображение выше) по регионам.

structure(list(domicilio = c(11000015001, 11000015003, 11000015004), agua = c(0, 0, 6), ind_agua = c(0, 0, 1), esgoto = c(1, 1, 6), ind_cond_sanitaria = c(1, 1, 1), lixo = c(0, 0, 0), ind_lixo = c(0, 0, 0), luz = c(0, 0, 0), ind_iluminacao = c(0, 0, 0), ativos = c(0, 0, 0), ind_ativos = c(0, 0, 0), emprego = c(0, 0, 0), ind_emprego = c(0, 0, 0), renda = c(0, 0, 0), ind_renda = c(0, 0, 0), casa = c(1, 1, 0), ind_riqueza = c(1, 1, 0), anos = c(0, 0, 0), ind_estudo = c(0, 0, 0), ler = c(0, 0, 0), ind_alfabetizado = c(0, 0, 0), peso = c(270, 270, 270), sexo = c(0, 1, 1), uf = c("11", "11", "11"), v4609 = c("001772940", "001772940", "001772940"), v4617 = c(110001, 110001, 110001), v4618 = c(1, 1, 1), pre_wgt = c(200, 200, 200), one = c(1L, 1L, 1L), region = c("1", "1", "1"), c = c(0.2, 0.2, 0.2), q = c(0, 0, 0)), .Names = c("domicilio", "agua", "ind_agua", "esgoto", "ind_cond_sanitaria", "lixo", "ind_lixo", "luz", "ind_iluminacao","ativos", "ind_ativos", "emprego", "ind_emprego", "renda", "ind_renda", "casa", "ind_riqueza", "anos", "ind_estudo", "ler", "ind_alfabetizado","peso", "sexo", "uf", "v4609", "v4617", "v4618", "pre_wgt", "one", "region", "c", "q"), row.names = c(NA, 3L), class = "data.frame")

+0

Добро пожаловать в стек переполнение! Вы должны проверить [ask]. Тем временем это поможет нам помочь вам включить образец вашего фрейма данных с помощью 'dput (data.frame)' и вставить результирующий код в ваш вопрос. –

+0

Спасибо Джейку. Я сделал, но я не знаю, как вставить огромный результирующий код, редактирующий мой вопрос. –

+0

'dput (head (data.frame, x))' где x - количество строк, которые вы хотите вывести. –

ответ

0
# complex sample survey design 
library(survey) 

# your data.frame 
x <- structure(list(domicilio = c(11000015001, 11000015003, 11000015004), agua = c(0, 0, 6), ind_agua = c(0, 0, 1), esgoto = c(1, 1, 6), ind_cond_sanitaria = c(1, 1, 1), lixo = c(0, 0, 0), ind_lixo = c(0, 0, 0), luz = c(0, 0, 0), ind_iluminacao = c(0, 0, 0), ativos = c(0, 0, 0), ind_ativos = c(0, 0, 0), emprego = c(0, 0, 0), ind_emprego = c(0, 0, 0), renda = c(0, 0, 0), ind_renda = c(0, 0, 0), casa = c(1, 1, 0), ind_riqueza = c(1, 1, 0), anos = c(0, 0, 0), ind_estudo = c(0, 0, 0), ler = c(0, 0, 0), ind_alfabetizado = c(0, 0, 0), peso = c(270, 270, 270), sexo = c(0, 1, 1), uf = c("11", "11", "11"), v4609 = c("001772940", "001772940", "001772940"), v4617 = c(110001, 110001, 110001), v4618 = c(1, 1, 1), pre_wgt = c(200, 200, 200), one = c(1L, 
1L, 1L), region = c("1", "1", "1"), c = c(0.2, 0.2, 0.2), q = c(0, 0, 0)), .Names = c("domicilio", "agua", "ind_agua", "esgoto", "ind_cond_sanitaria", "lixo", "ind_lixo", "luz", "ind_iluminacao","ativos", "ind_ativos", "emprego", "ind_emprego", "renda", "ind_renda", "casa", "ind_riqueza", "anos", "ind_estudo", "ler", "ind_alfabetizado","peso", "sexo", "uf", "v4609", "v4617", "v4618", "pre_wgt", "one", "region", "c", "q"), row.names = c(NA, 3L), class = "data.frame") 

# your survey.design (this is not the correct svydesign statement, please follow the directions specific to your data set) 
y <- svydesign(~ 1 , data = x , weights = ~ pre_wgt) 

# your desired subset 
z <- subset(y , q == 1) 

# your desired mean 
svyby(~ c , ~ region , z , svymean) 
+0

Спасибо @Anthony он работает, как вы сказали, и с моим svydesign тоже ... –

0

Вот еще одна возможность. Для того, чтобы проиллюстрировать, создать набор данных в соответствии с вашими параметрами:

set.seed(787) 
dat.a <-runif(n=10,min=0,max=1) 
dat.b <-rbinom(n=10, size=1, prob=0.5) 
dat.1 <-data.frame(matrix(c(dat.a, dat.b), ncol=2, nrow=10)) 
colnames(dat.1) <-c("c","q") 

dat.1 
      c q 
1 0.35326234 1 
2 0.45277055 0 
3 0.29505270 0 
4 0.78723105 1 
5 0.95915348 1 
6 0.17505284 0 
7 0.79693672 0 
8 0.01648420 1 
9 0.02706417 0 
10 0.93996311 1 

Теперь подмножество извлекая все строки, которые соответствуют д = 1 и рассчитать средние для столбца с в результате выхода:

dat.1.subset <-dat.1[dat.1$q==1,] 

mean(dat.1.subset$c) 
[1] 0.6112188 
+0

я сделал, но после того, что я попытался это: 'svyratio (~ подмножество $ с, ~ подмножество $ д, ~ область, дизайн = base2015_pos, na.rm = TRUE, svytotal)' и он дал мне это: 'Ошибка в случае (отдельная) {: аргумент не интерпретируемая как логический дополнительно: предупреждающее сообщение: в случае (отдельный) {: условие имеет длину> 1 и только будет used' первого элемента спасибо –

+0

Хосе, если вы попробовали мою рекомендацию, и это сработало (или нет), пожалуйста, сообщите. Тем временем я не могу прокомментировать представленное вами обновление без данных и кода. –

+0

Спасибо @JPP. Я не знал, как создать среднее подмножество. –

Смежные вопросы