如何从R中提取列(变量)属性/标签到csv或excel

问题描述 投票:0回答:2

我有一个相当大的数据集,其中包含与每个变量相关的元数据,例如变量(列)名称为“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)

非常感谢您的帮助!

r label extract
2个回答
7
投票

将标签添加为一行,如下所示:

# 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))

0
投票

关于 @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)))
© www.soinside.com 2019 - 2024. All rights reserved.