访问for循环中的结构元素



我有一个从SPSS导入的相对较大的数据集,我想通过循环提取变量标签并为每列创建频率表。在我使用haven包导入数据集之后,变量标签存储在attributes(dat$col)$label

中。例如我这样做:attributes(dat$Geschlecht)$label我得到变量标签:"5.1 Geschlecht"

要执行for循环,我尝试了这样做:

col <- names(dat)
for(i in col) {
attributes(dat$i)$label
table(dat$i, useNA = "always")
}

但是它导致空输出,显然是因为当我想提取结构元素时,这不是引用列的方式。我将非常感谢任何关于如何修理它的建议。提前感谢!

数据样本:

dat <- structure(list(Geschlecht = structure(c(2, 1, 1, 1, 2, 1, 2, 
1, 1, 2, 1), label = "5.1 Geschlecht", format.spss = "F11.0", labels = c(Männlich = 1, 
Weiblich = 2, Divers = 3), class = c("haven_labelled", "vctrs_vctr", 
"double")), Alter = structure(c(38, 50, 58, 22, 22, 68, 63, 53, 
60, 30, 19), label = "5.2 Alter", format.spss = "F11.0", labels = c(`<18` = 17, 
`18` = 18, `19` = 19, `20` = 20, `21` = 21, `22` = 22, `23` = 23, 
`24` = 24, `25` = 25, `26` = 26, `27` = 27, `28` = 28, `29` = 29, 
`30` = 30, `31` = 31, `32` = 32, `33` = 33, `34` = 34, `35` = 35, 
`36` = 36, `37` = 37, `38` = 38, `39` = 39, `40` = 40, `41` = 41, 
`42` = 42, `43` = 43, `44` = 44, `45` = 45, `46` = 46, `47` = 47, 
`48` = 48, `49` = 49, `50` = 50, `51` = 51, `52` = 52, `53` = 53, 
`54` = 54, `55` = 55, `56` = 56, `57` = 57, `58` = 58, `59` = 59, 
`60` = 60, `61` = 61, `62` = 62, `63` = 63, `64` = 64, `65` = 65, 
`66` = 66, `67` = 67, `68` = 68, `69` = 69, `70` = 70, `71` = 71, 
`72` = 72, `73` = 73, `74` = 74, `75` = 75, `76` = 76, `77` = 77, 
`78` = 78, `79` = 79, `80` = 80, `81` = 81, `82` = 82, `83` = 83, 
`84` = 84, `85` = 85, `86` = 86, `87` = 87, `88` = 88, `89` = 89, 
`90` = 90, `91` = 91, `92` = 92, `93` = 93, `94` = 94, `95` = 95, 
`96` = 96, `97` = 97, `98` = 98, `99` = 99, `100` = 100, 101), class = c("haven_labelled", 
"vctrs_vctr", "double"))), row.names = c(NA, -11L), class = c("tbl_df", 
"tbl", "data.frame"))

我找到了一个使用labelled包的解决方案。

for(i in col) {
print(var_label(dat[i]))
print(table(dat[i], useNA = "always"))
}

最新更新