我有一个相当大的数据集,其中包含与每个变量相关的元数据,例如变量(列)名称为“qhyngage”,标签为“家庭中最年轻的人的年龄”。
我想将这些标签与数据一起提取为 CSV/ xlsx 格式,因此最终产品将是列名称作为第一行,然后标签作为第二行等的数据集。
我已经尝试过 R 中“外国”库中的内容,例如 dataset.labels <- as.data.frame(attr(dataset, "label")) but all this just returns NULL.
这是 R 环境查看器中数据列的特征的示例:
qqhhtype : 'haven_labelled' num 24 13 4 1 ...
..-attr(*, "label")=chr "DV: Household type"
..-attr(*,"labels")= Named num -10 -9 -8 -7...
.. ..-attr(*,"names")=chr "[-10] Non-responding person" ...
最终目标是拥有一个包含所有变量和观察结果的数据集,但还有一个包含变量标签的附加行。 (目前所有标签都为 NULL)
非常感谢您的帮助!
将标签添加为一行,如下所示:
# create example data
df <- data.frame(a = rep("a", 10), b = rep(1, 10))
attr(df$a, "label") <- "character var"
attr(df$b, "label") <- "numeric var"
l <- lapply(df, attr, "label") # Gives you list of the labeled variables
l <- as.data.frame(l, stringsAsFactors = F) # Convert list to dataframe
df <- rbind(l, df) # Bind the two
然后用您最喜欢的包导出为所需的格式,例如readr::write_csv、readxl::write_excel。
在
tidyverse
中你可以这样做:
df %>%
map_dfc(attr, "label") %>%
rbind(df)
tidyverse
相当于rbind()
,bind_rows()
更严格。因此,如果您想使用它,您需要首先将 df
中的所有变量转换为字符:
df %>%
map_dfc(attr, "label") %>%
bind_rows(mutate_all(df, as.character))
关于 @shs 关于 tidyverse 解决方案的回答,请注意
map_dfc()
和 mutate_all()
现已被取代。使用 map()
和 across()
的解决方案如下:
# Example data set
df <- data.frame(a = rep("a", 10), b = rep(1, 10))
attr(df$a, "label") <- "character var"
attr(df$b, "label") <- "numeric var"
# Conversion of column labels
df %>%
map(attr, "label") %>%
bind_rows(mutate(df, across(everything(), as.character)))