【发布时间】:2015-11-12 22:57:58
【问题描述】:
我有一个 SPSS 文件。我在使用“避风港”包中阅读过它:
library(haven)
spss1 <- read_spss("SPSS_Example.sav")
我创建了一个提取长标签的函数(在 SPSS -“标签”中):
fix_labels <- function(x, TextIfMissing) {
val <- attr(x, "label")
if (is.null(val)) TextIfMissing else val
}
longlabels <- sapply(spss1, fix_labels, TextIfMissing = "NO LABLE IN SPSS")
看起来像“避风港”中的一个小错误:
当我实际查看一个变量的属性时,它没有 SPSS 中的长标签但有值标签,我得到:
attr(spss1$WAVE, "label")
NULL
但是当我将我的函数长标签应用到我的数据框并询问它时 打印每列的长标签,对于同一列“WAVE”我 我得到 - 而不是 NULL:
NULL
VERY/SOMEWHAT FAMILIAR NOT AT ALL FAMILIAR
1 2
这当然是不正确的,因为它抓取了下一个属性 (哪一个?)并用它替换 NULL。
这个函数应该创建一个长标签向量和 通常是这样,例如:
str(longlabels)
Named chr [1:64] "Serial number" ...
- attr(*, "names")= chr [1:64] "Respondent_Serial" "weight" "r7_1" "r7_2" ...
但是,我刚刚获得了一个包含 92 列的 SPSS 文件,并准确地运行了 相同的功能。现在,我得到的不是向量,而是列表
str(longlabels)
List of 92
$ VEHRATED : chr "VEHICLE RATED"
$ RESPID : chr "RESPONDENT ID"
$ RESPID8 : chr "8 DIGIT RESPONDENT NUMBER"
关于长标签结构的观察:那些列 在 SPSS 中没有长标签但确实有值(值 标签) - 对他们来说,我的函数获取他们的值标签,所以现在 我的长标签被记录为带有名称的数字向量,例如:
$ AWARE2 : Named num [1:2] 1 2
..- attr(*, "names")= chr [1:2] "VERY/SOMEWHAT FAMILIAR" "NOT AT ALL FAMILIAR"
问题:如何避免为 没有长标签的列?
【问题讨论】:
标签: r attributes labels r-haven