當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。