如何解决保存 .dta:使用 R
我有一个包含多个变量的 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) 以相对较快的方式执行此操作。
解决方法
使用 readstata13 包中的 save.dta13
。
R:
readstata13::save.dta13(longString,"tst.dta")
Stata:
. use "V:\tst.dta"
. list
+------------------------------------------------------------------------------------------------------+
| V1 |
|------------------------------------------------------------------------------------------------------|
1. | GZSPZGLLKOQHETKURLPKQDTZWTNHLDJDUSAFAXHFMPKUDIZURKIFLWQSXSFBLTPBGBLJKTDYJCHZOPZCFYKIMLGTQGDKRNBGUI.. |
+------------------------------------------------------------------------------------------------------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。