如何在R语言中从标记数据框仅显示某一类属性(如labels)
仅显示指定单一属性的R函数修改方案
当前自定义的showAt函数会输出变量的全部属性(包含labels、label、class三类),可以通过两种方式修改,实现仅提取指定的单一属性:
原代码问题复现
library(tidyverse) library(labelled) df <- tibble(age = c(10,20,30), sex = c(1,1,2)) df$sex <- labelled( c(1, 1, 2), c(Male = 1, Female = 2), label = "Assigned sex at birth" ) # 原函数:输出全部属性 showAt <- function(db, v) { at <- df %>% pull({{v}}) %>% attributes return(at) } showAt(df, sex) #> $labels #> Male Female #> 1 2 #> #> $label #> [1] "Assigned sex at birth" #> #> $class #> [1] "haven_labelled" "vctrs_vctr" "double"
解决方案1:给函数新增属性指定参数
修改showAt函数,添加attr_name参数来指定要提取的属性名,直接从属性列表中取出对应元素:
showAt <- function(db, v, attr_name) { at <- db %>% pull({{v}}) %>% attributes() %>% .[[attr_name]] # 提取指定属性 return(at) } # 调用示例:仅提取labels属性 showAt(df, sex, "labels") #> Male Female #> 1 2 # 提取label属性 showAt(df, sex, "label") #> [1] "Assigned sex at birth" # 提取class属性 showAt(df, sex, "class") #> [1] "haven_labelled" "vctrs_vctr" "double"
解决方案2:直接使用labelled包自带函数
如果只是提取labels或label这类常用属性,labelled包本身提供了现成函数,无需自定义:
- 提取值标签(
labels)用val_labels():
val_labels(df$sex) #> Male Female #> 1 2
- 提取变量标签(
label)用var_label():
var_label(df$sex) #> [1] "Assigned sex at birth"
内容的提问来源于stack exchange,提问作者sbac
相关产品推荐
相关产品推荐

