【发布时间】:2019-03-06 15:44:45
【问题描述】:
我在 R haven 包中发现了一个错误,其中write_dta 在 Stata 中读取它时会丢弃一些标签。我在haven 中有filed the bug,但我真的需要找到解决方法,直到错误得到修复。下面是解释。
让我们定义一个只有 一个 标记为 NA 值的双精度对象。
library(haven)
#> Warning: package 'haven' was built under R version 3.4.4
tst <-
labelled(
c(
1:5,
tagged_na("d")
),
c(
"Agree Strongly" = 1,
"Agree" = 2,
"Neither agree nor disagree" = 3,
"Disagree" = 4,
"Disagree strongly" = 5,
"No answer" = tagged_na("d")
)
)
tst
#> <Labelled double>
#> [1] 1 2 3 4 5 NA(d)
#>
#> Labels:
#> value label
#> 1 Agree Strongly
#> 2 Agree
#> 3 Neither agree nor disagree
#> 4 Disagree
#> 5 Disagree strongly
#> NA(d) No answer
write_dta(data.frame(freehms = tst), "test.dta", version = 13)
如果我在 Stata 中加载它并输入 tab freehms,所有标签都是正确的:
现在,如果我使用上面的代码并添加另一个标记为 NA 的值,那么 write_dta 会出于某种原因删除最后一个标签:
library(haven)
#> Warning: package 'haven' was built under R version 3.4.4
tst <-
labelled(c(1:5,
tagged_na('d'),
## Only added this
tagged_na('c')
),
c('Agree Strongly' = 1,
'Agree' = 2,
'Neither agree nor disagree' = 3,
'Disagree' = 4,
'Disagree strongly' = 5,
'No answer' = tagged_na('d'),
## And this
'Dont know' = tagged_na('c')
)
)
tst
#> <Labelled double>
#> [1] 1 2 3 4 5 NA(d) NA(c)
#>
#> Labels:
#> value label
#> 1 Agree Strongly
#> 2 Agree
#> 3 Neither agree nor disagree
#> 4 Disagree
#> 5 Disagree strongly
#> NA(d) No answer
#> NA(c) Dont know
write_dta(data.frame(freehms = tst), "test.dta", version = 13)
我查看了 foreign 中的 write.dta 函数,但它似乎不支持 11 版之后的 Stata 版本。还有其他解决方法吗?
【问题讨论】: