【问题标题】:How to load .dta (preserving labels) most comfortable in R?如何在 R 中最舒服地加载 .dta(保留标签)?
【发布时间】:2020-01-02 10:47:09
【问题描述】:

我使用 .dta 文件并尝试使加载数据尽可能舒适。在我看来,我需要havenreadstata13 的组合。

  • haven 看起来很完美。它提供了最好的“子标签”。但它不提供列选择器功能。我不能将read_dta 用于大文件(~ 1 GB / 在 64 GB RAM 上,Intel Xeon E5)。 问题:有没有办法选择/加载数据子集?

  • read.dta13 是我最好的解决方法。它有select.cols。但是我必须稍后获得attr,保存并合并它们(大约10个文件)。

    问题:如何手动添加haven 包创建的这些第二个标签? (怎么称呼?)

这是 MWE:

library(foreign)
write.dta(mtcars, "mtcars.dta")

library(haven)
mtcars <- read_dta("mtcars.dta")

library(readstata13)
mtcars2 <- read.dta13("mtcars.dta", convert.factors = FALSE, select.cols=(c("mpg", "cyl", "vs")))
var.labels <- attr(mtcars2,"var.labels")
data.key.mtcars2 <- data.frame(var.name=names(mtcars2),var.labels)

【问题讨论】:

    标签: r read-data r-haven


    【解决方案1】:

    havendevelopment version 支持使用col_select 参数选择列:

    library(haven) # devtools::install_github("tidyverse/haven")
    mtcars <- read_dta("mtcars.dta", col_select = c(mpg, cyl, vs))
    

    或者; RStudio 查看器中的列标签取自数据框的列的"label" 属性。您可以使用一个简单的循环从readstata13 读取的标签中分配它们:

    for (i in seq_along(mtcars2)) {
      attr(mtcars2[[i]], "label") <- var.labels[i]
    }
    
    View(mtcars2)
    

    【讨论】:

    • 非常感谢您的开发。 col_select 功能使 haven 完美,不再有理由使用其他软件包。但是开发版本的安装对我不起作用,它说“错误:无法从 GitHub 安装 'haven':(从警告转换)安装包 'XX/haven_2.1.1.9000.tar.gz' 没有-零退出状态”
    • 好的,我必须手动删除我的库中的00LOCK-haven 文件夹。然后它起作用了。期待haven的新版本。
    猜你喜欢
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多