应用于Stata文件的Hadley Wickham的haven
软件包返回包含许多“标签”类型的列的tibble。你可以看到这些通过str(),例如:R:从Stata提供的“标签”加密列中提取标签属性
$ 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" ...
这将是很好,如果我可以简单地提取这些标记向量的因素,但我比较了标签的长度属性来唯一值的数量在每个矢量中,它有时更长,有时更短。所以我想我需要看看所有这些,并决定如何分别处理每一个。
所以我想提取标签属性的值到列表。但是,此功能:
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")
产生的文件很小。嘿!那很简单!我认为这很难打破这一小块。
打开微小用记事本+ +,这是我发现:
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"))
我怀疑这可能是由一个小间距的可读性,但我并不想用它淤泥生怕一不小心破坏有关信息。
莫非你'dput()所需的数据的'的最小量为封装所述问题可再现的例子? –
参见'?haven :: labelled';他们有自己的'as_factor'方法。 – alistaire
感谢您的提示,@alistaire!不幸的是,每列的数据部分中的唯一值的数量和标签矢量的相对长度都在地图上。对于大多数栏目来说,既不是一对一的比赛,也不是一对缺少的代码。因此,我没有准备好相信一刀切的转换,直到我更仔细地查看数据并找出发生了什么。 – andrewH