2

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

  • 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)
4

1 回答 1

2

haven开发版本支持选择带有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)
于 2019-08-29T08:02:47.143 回答