【问题标题】:Survey design related issues in RR中的调查设计相关问题
【发布时间】:2020-08-26 01:11:50
【问题描述】:

我使用dplyr 包的full_join 函数加入了五个数据集。第一个数据集有 6,165 行;第二个数据集有 5,827 行。最终连接的数据集有 33,503 行。 我用下面的代码加入了五个数据集。

n2<-full_join(n96, n01)
    n3<-full_join(n2, n06)
    n4<-full_join(n3, n11)
    nf<-full_join(n4, n16)
    View(nf)

最终的数据集如下所示......

 v000    v005     age  v021  v022  v023    v024    resi  region    v102 education pregnant  v445    v501    v717  wealth occupation marital  wgtv   BMI obov 
  <chr>  <dbl> <dbl+l> <dbl> <dbl> <dbl> <dbl+l> <dbl+l> <dbl+l> <dbl+l> <dbl+lbl> <dbl+lb> <dbl> <dbl+l> <dbl+l> <dbl+l>  <dbl+lbl> <dbl+l> <dbl> <dbl> <fct>
1 NP3   412612 6 [40-~   101    51     0 1 [pro~ 2 [rur~ 1 [pro~ 2 [rur~ 0 [no ed~ 0 [no o~  2285 1 [mar~ 4 [agr~ 1 [poo~ 2 [cleric~ 1 [mar~ 0.413  22.8 0    
2 NP3   412612 3 [25-~   101    51     0 1 [pro~ 2 [rur~ 1 [pro~ 2 [rur~ 0 [no ed~ 0 [no o~  2159 1 [mar~ 4 [agr~ 1 [poo~ 2 [cleric~ 1 [mar~ 0.413  21.6 0    
3 NP3   412612 4 [30-~   101    51     0 1 [pro~ 2 [rur~ 1 [pro~ 2 [rur~ 0 [no ed~ 0 [no o~  2167 1 [mar~ 4 [agr~ 3 [mid~ 2 [cleric~ 1 [mar~ 0.413  21.7 0    
4 NP3   412612 5 [35-~   101    51     0 1 [pro~ 2 [rur~ 1 [pro~ 2 [rur~ 0 [no ed~ 0 [no o~  2039 1 [mar~ 4 [agr~ 4 [ric~ 2 [cleric~ 1 [mar~ 0.413  20.4 0    
5 NP3   412612 2 [20-~   101    51     0 1 [pro~ 2 [rur~ 1 [pro~ 2 [rur~ 1 [prima~ 0 [no o~  2163 1 [mar~ 4 [agr~ 3 [mid~ 2 [cleric~ 1 [mar~ 0.413  21.6 0    
6 NP3   412612 5 [35-~   101    51     0 1 [pro~ 2 [rur~ 1 [pro~ 2 [rur~ 0 [no ed~ 0 [no o~  3785 1 [mar~ 4 [agr~ 2 [poo~ 2 [cleric~ 1 [mar~ 0.413  37.8 2    
# ... with 6 more variables: over <fct>, age1 <dbl+lbl>, working_status <dbl+lbl>, education1 <dbl+lbl>, year <dbl>, stra <fct>

因为它是一个复杂的调查数据集。我使用了调查设计。

svs<-svydesign(id=nf$v021, strata=nf$stra, nest=TRUE, weights=nf$wgtv, data=nf)

它有效。在分析过程中,我发现了与对象相关的错误。为了解决这个问题,我使用了以下代码-

svs1 <- 
  update(
    svs, 
    one=1, 
    edu = factor( education, levels = c(0, 1, 2, 3), labels = 
                    c("no edu", "primary", "secondary", "higher") ),
    
    wealth =factor( wealth, levels = c(1, 2, 3, 4, 5) , labels = 
                      c("poorest", "poorer", "middle", "richer", "richest")),
    marital = factor( marital, levels = c(0, 1) , labels = 
                        c( "never married", "married")),
    occu = factor( occu, levels = c(0, 1, 2, 3) , labels =
                           c( "not working" , "professional/technical/manageral/clerial/sale/services" , "agricultural", "skilled/unskilled manual") ),
    age1 = factor(age1, levels = c(1, 2, 3), labels =
                   c( "early" , "mid", "late") ),
    obov= factor(obov, levels = c(0, 1, 2), labels= 
                      c("normal", "overweight", "obese")),
    
    over= factor(over, levels = c(0, 1), labels= 
                   c("normal", "overweight/obese")),
    
    working_status= factor (working_status, levels = c(0, 1), labels = c("not working", "working")),
    education1= factor (education1, levels = c(0, 1, 2), labels= 
                          c("no education", "primary", "secondary/secondry+")),
    resi= factor (resi, levels= c(0,1), labels= c("urban", "rural"))
  )

现在,我发现了以下错误

Error in `[<-.data.frame`(`*tmp*`, , newnames[j], value = c(3L, 3L, 3L,  : 
  replacement has 12674 rows, data has 33503

请建议我如何解决此错误?

【问题讨论】:

    标签: r join error-handling


    【解决方案1】:

    我不确定update 函数是如何工作的,但您似乎想更改变量的因子水平。您可以在 nf 数据帧中执行此操作,然后将其传递给 svydesign 函数。

    library(dplyr)
    nf <- nf %>%
      mutate(edu = factor( education, levels = c(0, 1, 2, 3), labels = 
                    c("no edu", "primary", "secondary", "higher") ),
            wealth =factor( wealth, levels = c(1, 2, 3, 4, 5) , labels = 
                      c("poorest", "poorer", "middle", "richer", "richest")),
            marital = factor( marital, levels = c(0, 1) , labels = 
                        c( "never married", "married")),
            occu = factor( occu, levels = c(0, 1, 2, 3) , labels =
                     c( "not working" , "professional/technical/manageral/clerial/sale/services" , "agricultural", "skilled/unskilled manual") ),
            age1 = factor(age1, levels = c(1, 2, 3), labels =
                    c( "early" , "mid", "late") ),
            obov= factor(obov, levels = c(0, 1, 2), labels= 
                   c("normal", "overweight", "obese")),
            over= factor(over, levels = c(0, 1), labels= 
                   c("normal", "overweight/obese")),
           working_status= factor (working_status, levels = c(0, 1), labels = c("not working", "working")),
          education1= factor (education1, levels = c(0, 1, 2), labels= 
                          c("no education", "primary", "secondary/secondry+")),
          resi= factor (resi, levels= c(0,1), labels= c("urban", "rural")))
    

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 2013-04-25
      相关资源
      最近更新 更多