【发布时间】:2021-04-23 17:06:20
【问题描述】:
我有一个包含多个变量的 df,其中一些是非常长的字符串,最多 4500 个字符。我想将此数据库导出为.dta 文件。
我尝试使用 Haven 的 write_dta() 函数保存它,但收到以下错误消息:Error in write_dta_(data, normalizePath(path, mustWork = FALSE), version = stata_file_format(version), : Writing failure: A provided string value was longer than the available storage size of the specified column.
这是一个问题的例子:
library(haven)
longFun <- function(n) {
do.call(paste0, replicate(5000, sample(LETTERS, n, TRUE), FALSE))
}
longString <- data.frame(VeryveryveryveryveryveryveryveryveryveryVeryveryveryveryveryveryveryveryveryverylongname = longFun(1), stringsAsFactors = F)
write_dta(longString,"tst.dta")
我知道write_dta 在处理长字符串 (https://github.com/tidyverse/haven/issues/437) 时存在问题,一种可能性是修剪字符串 (Error in write_dta : A provided string value was longer than the available storage size of the specified column)。但我必须保留完整的字符串。
有没有办法使用 R 将带有长字符串的变量保存为 .dta 文件?
编辑:
我已经尝试过@jay.sf 建议的readstata13::save.dta13 选项,但这有两个问题:1) 无法管理 - 即它截断 - 超过 32-UTF 字符的长变量名,write_dta() 管理得很好。 2) 比write_dta() 慢很多。鉴于我必须保存一个非常大的数据集,这是一个相关的问题。
总之有没有其他方法可以让我
a) 保存为 .dta 一个带有很长字符串的 df
b) 保留原始变量名(长于 32-UTF 字符)
c) 以相对快速的方式执行此操作。
【问题讨论】: