gpt4 book ai didi

r - 从 Stata 的避难所导入的 "labeled"tibble 列中提取标签属性

转载 作者:行者123 更新时间:2023-12-02 02:42:53 25 4
gpt4 key购买 nike

Hadley Wickham 的 haven 包应用于 Stata 文件,返回一个包含许多“标记”类型列的 tibble。您可以使用 str() 查看这些,例如:

$ MSACMSZ    :Class 'labelled'  atomic [1:8491861] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "metropolitan area size (cmsa/msa)"
.. ..- attr(*, "labels")= Named int [1:7] 0 1 2 3 4 5 6
.. .. ..- attr(*, "names")= chr [1:7] "not identified or nonmetropolitan" "100,000 - 249,999" "250,000 - 499,999" "500,000 - 999,999" ...

如果我可以简单地将所有这些标记向量提取为因子,那就太好了,但是我将标签属性的长度与每个向量中唯一值的数量进行了比较,它有时更长,有时更短。因此,我认为我需要查看所有这些问题并决定如何单独处理每个问题。

所以我想将 labels 属性的值提取到列表中。然而,这个函数:

labels93 <- lapply(cps_00093.df, function(x){attr(X, which="labels", exact=TRUE)})

对所有变量返回 NULL。

这是 tibble 与数据框问题吗?如何将这些属性从 tibble 列提取到列表中?

请注意,标签向量已命名,我需要标签和名称。

根据 @Hack-R 的请求,这里是由 dput (我以前从未使用过)转换的数据的一小段。我应用了这段代码:

filter(cps_00093.df, YEAR==2015) %>%
sample_n(10) %>%
select(HHTENURE, HHINTYPE) -> tiny
dput(tiny, file = "tiny")

生成文件tiny.嘿!那很简单!我认为这么小的一 block 很难折断。

用Notepad++打开tiny,这是我发现的:

structure(list(HHTENURE = structure(c(2L, 1L, 1L, 2L, 1L, 1L, 
1L, 2L, 1L, 1L), labels = structure(c(0L, 1L, 2L, 3L, 6L, 7L), .Names = c("niu",
"owned or being bought", "rented for cash", "occupied without payment of cash rent",
"refused", "don't know")), class = "labelled"), HHINTYPE = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), labels = structure(1:3, .Names = c("interview",
"type a non-interview", "type b/c non-interview")), class = "labelled")), row.names = c(NA,
-10L), class = c("tbl_df", "tbl", "data.frame"), .Names = c("HHTENURE",
"HHINTYPE"))

我怀疑可以通过一点间距来使其更具可读性,但我不想弄乱它,因为担心意外破坏相关信息。

最佳答案

最初的问题询问如何“将标签属性的值提取到列表中”。主要问题的解决方案如下(假设 some_df 是通过 haven 导入的,并且具有 label 属性)。更新:我现在添加了一种使用 sjlabelled 包提取标签向量的方法。

library(purrr)
n <- ncol(some_df)
labels_list <- map(1:n, function(x) attr(some_df[[x]], "label") )

# if a vector of character strings is preferable
labels_vector <- map_chr(1:n, function(x) attr(some_df[[x]], "label") )

# to make a simple codebook
library(kable)
variable_name <- names(some_df)
data.frame(variable_name, description = labels_vector) %>%
kable(format = 'markdown')

# UPDATE: another approach with package sjlabelled
library(sjlabelled)
sjlabelled::get_label(some_df)

关于r - 从 Stata 的避难所导入的 "labeled"tibble 列中提取标签属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39671621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com