2016-12-15 56 views
0

我在data.frame中有两个变量“c”和“q”。 “c”是介于0和1之间的数字(贫困水平),“q”表示家庭(或对象)贫困为1​​或非贫困为0。 我怎样才能计算贫困家庭(q = 1)的“c”的均值。使用调查的子集的均值

What I need

重要的细节:我有一个coutry数据库,我想这个结果的区域。 我使用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

欢迎堆叠溢出!你应该检查[问]。与此同时,它可以帮助我们使用'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
aggregate(df$c, by=list(df$q), FUN=mean) 
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 

现在通过提取匹配是q = 1且在所得的输出计算意味着列c中的所有行子集:

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

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

我做了,但在那之后,我试过这个: 'svyratio(〜subset $ c,〜subset $ q,〜region,design = base2015_pos,na.rm = TRUE,svytotal)' 他给我这个: '中的错误,如果(单独的){:参数不是解释成逻辑 此外:警告消息: 在如果(单独的){: 条件具有长度> 1且仅第一个元素将被used' 谢谢 –

+0

何塞,如果你尝试了我的建议,它的工作(或没有),请告知。与此同时,我无法对没有数据和代码的更新提出评论。 –

+0

谢谢@JPP。 我不知道如何创建子集意思。 –