首页 > 解决方案 > 导入多个 .dta 文件,删除标记为 fomat 的 Haven,从 R 中所有导入的 dta 文件创建数据框

问题描述

我正在尝试导入多个 .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

解决方案


以下内容对我有用一些模拟 .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)


推荐阅读