1

我已将 Stata (dta) 文件读入 R,数据片段如下所示:

 short
# A tibble: 200 x 5
            q4_1          q4_2          q4_3          q4_4 treatment_cur
       <dbl+lbl>     <dbl+lbl>     <dbl+lbl>     <dbl+lbl> <chr>        
 1 NA(z)         NA(z)         NA(z)         NA(z)         Control      
 2 NA(z)         NA(z)         NA(z)         NA(z)         Control      
 3     1 [1.Yes]     0 [0.No]      0 [0.No]      1 [1.Yes] Treatment    
 4     0 [0.No]      0 [0.No]      1 [1.Yes]     0 [0.No]  Control      
 5     0 [0.No]      0 [0.No]      0 [0.No]      1 [1.Yes] Control      
 6 NA(z)         NA(z)         NA(z)         NA(z)         Control      
 7     1 [1.Yes]     1 [1.Yes]     1 [1.Yes]     1 [1.Yes] Control      
 8 NA(z)         NA(z)         NA(z)         NA(z)         Treatment    
 9 NA(z)         NA(z)         NA(z)         NA(z)         Control      
10     0 [0.No]      0 [0.No]      1 [1.Yes]     0 [0.No]  Control 

变量的格式如下:

str(short)
tibble [200 x 5] (S3: tbl_df/tbl/data.frame)
 $ q4_1         : dbl+lbl [1:200] NA(z), NA(z),     1,     0,     0, NA(z),     1, NA(z), NA(z),     0, NA(z),     1, NA(z),     1, NA(z),     1, ...
   ..@ label       : chr "q4_1r.Do you have any of ...assignments? Bilingual/ELL"
   ..@ format.stata: chr "%15.0g"
   ..@ labels      : Named num [1:2] 0 1
   .. ..- attr(*, "names")= chr [1:2] "0.No" "1.Yes"
 $ q4_2         : dbl+lbl [1:200] NA(z), NA(z),     0,     0,     0, NA(z),     1, NA(z), NA(z),     0, NA(z),     0, NA(z),     0, NA(z),     0, ...
   ..@ label       : chr "q4_2r.Do you have any of ...assignments? Sp Ed (self-c)"
   ..@ format.stata: chr "%34.0g"
   ..@ labels      : Named num [1:2] 0 1
   .. ..- attr(*, "names")= chr [1:2] "0.No" "1.Yes"
 $ q4_3         : dbl+lbl [1:200] NA(z), NA(z),     0,     1,     0, NA(z),     1, NA(z), NA(z),     1, NA(z),     1, NA(z),     1, NA(z),     0, ...
   ..@ label       : chr "q4_3r.Do you have any of ...assignments? Sp Ed (incl.)"
   ..@ format.stata: chr "%72.0g"
   ..@ labels      : Named num [1:2] 0 1
   .. ..- attr(*, "names")= chr [1:2] "0.No" "1.Yes"
 $ q4_4         : dbl+lbl [1:200] NA(z), NA(z),     1,     0,     1, NA(z),     1, NA(z), NA(z),     0, NA(z),     1, NA(z),     0, NA(z),     0, ...
   ..@ label       : chr "q4_4r.Do you have any of ...assignments? Gifted/Talented"
   ..@ format.stata: chr "%17.0g"
   ..@ labels      : Named num [1:2] 0 1
   .. ..- attr(*, "names")= chr [1:2] "0.No" "1.Yes"
 $ treatment_cur: chr [1:200] "Control" "Control" "Treatment" "Control" ...
  ..- attr(*, "label")= chr "treatment_cur.treatment_cur"
  ..- attr(*, "format.stata")= chr "%9s"

这是每个变量的类:

> class(short$q4_1)
[1] "haven_labelled" "vctrs_vctr"     "double"

我需要使用 library(gtsummary) 中的 tbl_summary 创建数据的描述性表格——这是一个非常酷的包,可以创建快速且可自定义的数据摘要统计信息。

我的数据最酷的地方在于每个值都已经有一个与之关联的标签。例如在 q4_2 中,0 是“否”,1 是“是”。这样当我将数据输入 tbl_summary 时,而不是显示在频率计数中:

q4_1    n
   1    7 
   0    8

这可以显示出来这就是我想要的

"q4_1r.Do you have any of ...assignments? Bilingual/ELL"    
        n 
   No   7
   Yes  8

此代码不起作用,因为 tbl_summary 仅接受某些格式。

tbl_summary(short)
Column(s) ‘q4_1’, ‘q4_2’, ‘q4_3’, and ‘q4_4’ omitted from output.
Accepted classes are ‘character’, ‘factor’, ‘numeric’, ‘logical’, ‘integer’, or ‘difftime’. 

如果我将这些变量转换为字符,它们会丢失其值标签,而我只看到以下内容,因为将其转换为字符会使变量失去其标签属性。

q4_1    n
   1    7 
   0    8

有什么想法可以解决这个问题吗?我找不到具有这种类型的 var 格式的内置 R 文件以使其更具重现性。

4

1 回答 1

2

就避风港标签类而言,它绝不是用于分析或数据探索的类。相反,它是在从其他语言导入数据时创建的,其中数据类型与 R 没有一对一的关系。这是来自关于有标签的变量类的 tidyverse 博客文章。(https://haven.tidyverse.org/articles/semantics.html

避风港的目标不是提供可以在分析中随处使用的标记向量。目标是提供一个中间数据结构,您可以将其转换为常规 R 数据帧。

要使用tbl_summary(),您首先要as_factor()在导入的数据框上应用该功能,例如haven::as_factor(short). 这会将您的数据框转换为基本 R 类型,并保留 Stata 值标签作为因子。

仅供参考,我们正在tbl_summary()与所有类型兼容,并且在包的下一个版本as_factor()中将不需要该步骤。您可以在此处关注实施进度:https ://github.com/ddsjoberg/gtsummary/pull/603

于 2020-09-11T16:53:29.013 回答