目前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 read_xpt 读写 SAS 传输文件
- R haven read_sas 读取 SAS 文件
- R haven read_spss 读取和写入 SPSS 文件
- R haven zap_missing 将特殊缺失修改为常规 R 缺失
- R haven print_labels 打印带标签向量的标签
- R haven tagged_na “标记”缺失值
- R haven zap_label Zap 变量标签
- R haven labelled 创建一个标记向量。
- R haven as_factor 将标记向量转换为因子
- R haven zap_empty 将空字符串转换为缺失值
- R haven labelled_spss SPSS 的标记向量
- R haven zap_labels Zap值标签
- R SparkR hashCode用法及代码示例
- R hms hms 用于存储一天中的时间值的简单类
- R SparkR hint用法及代码示例
- R hms parse_hms 解析 hms 值
- R SparkR histogram用法及代码示例
- R SparkR head用法及代码示例
- R hms round_hms 四舍五入或截断为秒的倍数
- R dtrMatrix-class 三角形稠密数值矩阵
- R vcov.gam 从 GAM 拟合中提取参数(估计器)协方差矩阵
- R gam.check 拟合 gam 模型的一些诊断
- R ggplot2 annotation_logticks 注释:记录刻度线
- R matrix转list用法及代码示例
- R Pixel X 射线像素强度随时间的变化
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Read and write Stata DTA files。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。