【问题标题】:Import multiple .dta files, remove haven labelled fomat, create a dataframe from all imported dta files in R导入多个 .dta 文件,删除标记为 fomat 的 Haven,从 R 中所有导入的 dta 文件创建数据框
【发布时间】:2021-04-09 17:45:14
【问题描述】:

我正在尝试导入多个 .dta 文件并从所有导入的 dta 文件中创建一个数据框。我尝试使用以下代码,但没有成功。它适用于 csv 文件,但我没有 stata 来保存我尝试导入并进入数据框的 100 个文件。

library(tidyverse)
library(haven)

tbl1 <-
list.files(pattern = "*.dta") %>%
map_df(~read_dta(.))

Error: Can't convert from `$a1` <labelled<double>> to `$a1` <labelled<double>> due to loss of precision.
* Locations: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, ...
Values are labelled in `$a1` but not in `$a1`.
idstd    id preference rotation       a0     a1     a1a      a2     a3a     a3b
   <dbl> <dbl>      <dbl>    <dbl> <dbl+lb> <dbl+> <dbl+l> <dbl+l> <dbl+l> <dbl+l>
1 590217     1          2        1 1 [Manu~     17 2 [Amh~ 1 [Add~ 1 [Add~ 1 [Yes]
2 590218     3          1        1 1 [Manu~     17 2 [Amh~ 1 [Add~ 1 [Add~ 1 [Yes]
3 590219     4          7        2 1 [Manu~     17 2 [Amh~ 1 [Add~ 1 [Add~ 1 [Yes]
4 590220     6          6        2 1 [Manu~     17 2 [Amh~ 1 [Add~ 1 [Add~ 1 [Yes]
5 590221    10          4        2 2 [Reta~     17 2 [Amh~ 1 [Add~ 1 [Add~ 1 [Yes]
6 590222    12         12        3 1 [Manu~     17 2 [Amh~ 1 [Add~ 1 [Add~ 1 [Yes]

【问题讨论】:

    标签: r


    【解决方案1】:

    以下内容适用于我的一些模拟 .dta,但如果不查看您的数据就很难确定。

    一个建议是改用read.dta13,因为它处理较新版本(13+)的Stata。

    library(tidyverse)
    library(readstata13)
    
    df_list < lapply(list.files(pattern="*.dta"), read.dta13)
    tbl1 <- do.call(rbind.data.frame, df_list)
    
    

    【讨论】:

    • 嗨!谢谢参观。我添加了其中一个数据集的 sn-p。我运行了您建议的代码,但出现以下错误:``` r > df_list tbl1
    • 我认为问题在于 stata 中的变量是双重标记的。有没有办法解决这个问题?我猜如果变量只标记为字符、因子、数字等,这将起作用。
    • 嗨@DSan,我不确定变量是否被双重标记,但也许你可以分享你在尝试这个时遇到的错误?做rbindread.dta13 部分时是否中断?
    • 是的,在我运行 tbl1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2017-11-14
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多