当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R haven read_dta 读写Stata DTA文件


目前haven可以读写逻辑、整数、数字、字符和因子。请参阅 labelled() 了解如何在 R 中处理 Stata 中的标记变量。

如果任何组件为 strl_threshold 字节或更长(且 version >= 13),则字符向量将存储为 strL;否则它们将被存储为适当的 str#

用法

read_dta(
  file,
  encoding = NULL,
  col_select = NULL,
  skip = 0,
  n_max = Inf,
  .name_repair = "unique"
)

read_stata(
  file,
  encoding = NULL,
  col_select = NULL,
  skip = 0,
  n_max = Inf,
  .name_repair = "unique"
)

write_dta(
  data,
  path,
  version = 14,
  label = attr(data, "label"),
  strl_threshold = 2045,
  adjust_tz = TRUE
)

参数

file

文件路径、连接或文字数据(单个字符串或原始向量)。

.gz.bz2.xz.zip 结尾的文件将自动解压缩。将自动下载以 http://https://ftp://ftps:// 开头的文件。远程gz文件也可以自动下载并解压。

文字数据对于示例和测试最有用。要被识别为文字数据,输入必须用 I() 包装,是包含至少一个换行符的字符串,或者是至少包含一个带有换行符的字符串的向量。

使用值 clipboard() 将从系统剪贴板读取。

encoding

文件使用的字符编码。一般来说,仅 Stata 13 文件及更早版本需要。有关详细信息,请参阅编码部分。

col_select

一个或多个选择表达式,例如 dplyr::select() 。使用c()list() 来使用多个表达式。有关可用选择选项的详细信息,请参阅?dplyr::select。仅从 data_file 读取指定的列。

skip

读取数据之前要跳过的行数。

n_max

读取的最大行数。

.name_repair

有问题的列名的处理:

  • "minimal":没有名称修复或检查,超出基本存在,

  • "unique" :确保名称唯一且不为空,

  • "check_unique" :(默认值),没有名称修复,但检查它们是 unique

  • "universal" :命名为 unique 和语法

  • 函数:应用自定义名称修复(例如,.name_repair = make.names 用于基本 R 样式的名称)。

  • purrr-style 匿名函数,请参阅rlang::as_function()

此参数作为 repair 传递到 vctrs::vec_as_names() 。有关这些条款以及用于执行这些条款的策略的更多详细信息,请参阅此处。

data

要写入的数据帧。

path

将写入数据的文件的路径。

version

要使用的文件版本。支持版本 8-15。

label

要使用的数据集标签,或 NULL 。默认为 data 的 "label" 属性中存储的值。必须 <= 80 个字符。

strl_threshold

如果 version >= 13,则最大长度大于 strl_threshold 字节的任何字符向量都将存储为长字符串 (strL),而不是标准字符串 (str#) 变量。默认为 2045,即最大长度str# 变量。有关更多详细信息,请参阅 Stata long string 文档。

adjust_tz

Stata、SPSS 和 SAS 没有时区概念,所有 date-time 变量均被视为 UTC。 adjust_tz 控制写入时如何处理日期时间值的时区。

  • 如果 TRUE(默认),则忽略日期时间值的时区,并且它们将在 R 和 Stata/SPSS/SAS 中显示相同的内容,例如"2010-01-01 09:00:00 NZDT" 将写为 "2010-01-01 09:00:00" 。请注意,这会更改基础数值数据,因此如果保留 between-time-point 差异至关重要,请务必小心。

  • 如果 FALSE ,日期时间值将写入相应的 UTC 值,例如"2010-01-01 09:00:00 NZDT" 将写为 "2009-12-31 20:00:00"

一个 tibble DataFrame 变体,具有很好的默认值。

变量标签存储在每个变量的"label"属性中。它不会打印在控制台上,但 RStudio 查看器会显示它。

如果在 Stata 中定义了数据集标签,它将存储在 tibble 的 "label" 属性中。

write_dta() 以不可见方式返回输入data

字符编码

在 Stata 14 之前,文件没有声明文本编码,并且默认编码在不同平台上有所不同。如果 encoding = NULL ,haven 假定编码为 windows-1252,这是 Windows 上 Stata 使用的文本编码。不幸的是 Mac 和 Linux 上的 Stata 使用不同的默认编码"latin1"。如果遇到诸如“无法将字符串转换为请求的编码”之类的错误,请尝试encoding = "latin1"

对于 Stata 14 及更高版本,您不需要手动指定 encoding 值,除非该值被错误地记录在源文件中。

例子

path <- system.file("examples", "iris.dta", package = "haven")
read_dta(path)
#> # A tibble: 150 × 5
#>    sepallength sepalwidth petallength petalwidth species
#>          <dbl>      <dbl>       <dbl>      <dbl> <chr>  
#>  1        5.10       3.5         1.40      0.200 setosa 
#>  2        4.90       3           1.40      0.200 setosa 
#>  3        4.70       3.20        1.30      0.200 setosa 
#>  4        4.60       3.10        1.5       0.200 setosa 
#>  5        5          3.60        1.40      0.200 setosa 
#>  6        5.40       3.90        1.70      0.400 setosa 
#>  7        4.60       3.40        1.40      0.300 setosa 
#>  8        5          3.40        1.5       0.200 setosa 
#>  9        4.40       2.90        1.40      0.200 setosa 
#> 10        4.90       3.10        1.5       0.100 setosa 
#> # ℹ 140 more rows

tmp <- tempfile(fileext = ".dta")
write_dta(mtcars, tmp)
read_dta(tmp)
#> # A tibble: 32 × 11
#>      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
#>  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
#>  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
#>  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
#>  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
#>  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
#>  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
#>  8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
#>  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
#> 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
#> # ℹ 22 more rows
read_stata(tmp)
#> # A tibble: 32 × 11
#>      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
#>  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
#>  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
#>  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
#>  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
#>  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
#>  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
#>  8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
#>  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
#> 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
#> # ℹ 22 more rows
源代码:R/haven-stata.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Read and write Stata DTA files。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。