从 attr 中提取 R 中的数据标签,并添加为与变量/列名称对应的列

  • 本文关键字:变量 提取 attr 数据 标签 添加 r
  • 更新时间 :
  • 英文 :


我有一个非常大的数据集,其中包含超级缩写的变量名称,如果提取 attr(*, "label"( 部分中的标签并显示在相应变量旁边的列中,这将非常有帮助。

label(mtcars[["mpg"]]) <- "Miles/(US) gallon"
label(mtcars[["hp"]]) <- "Gross horsepower"
label(mtcars[["wt"]]) <- "Weight (1000lbs)"

我当前的代码只是从整个数据集中获取平均值/sd:

mtcars  %>% select(mpg, hp, wt) %>% pivot_longer(everything()) %>% group_by(name) %>% summarise(mean=mean(value, na.rm = TRUE), sd=sd(value, na.rm=TRUE)) 

但是我想要一个带有变量标签的列,这样更容易分辨:

name  mean   sd    label
hp    14.7.  68.6  Gross horsepower
mpg   20.1   6.03  Miles/(US) gallon
wt    3.22   0.978 Weight (1000lbs)

我找到了一个线程,可以达到我想要的内容,但是如果我在代码末尾添加mutate(labels=label(mtcars)[name]),我会得到一个带有 NA 而不是标签的列。

我们可以使用imap

library(purrr)
library(dplyr)
library(Hmisc)
imap_dfr(mtcars[c('hp', 'mpg', 'wt')], ~ 
tibble(name = .y, mean = mean(.x[[1]]), 
sd = sd(.x[[1]], na.rm = TRUE), 
label = attr(.x, 'label')))

如果我们使用 OP 的方法,我们也可以使用summarise_all然后做pivot_longer

library(tidyr)
mtcars %>%
dplyr::select(mpg, hp, wt) %>% 
summarise_all(list(mean =  ~mean(., na.rm = TRUE),
sd = ~sd(., na.rm = TRUE), 
label = ~attr(., 'label'))) %>%
mutate(rn = 1) %>%
pivot_longer(cols = -rn, names_to = c('name', '.value'), names_sep="_") %>% 
select(-rn)
#  name      mean         sd             label
#1  mpg  20.09062  6.0269481 Miles/(US) gallon
#2   hp 146.68750 68.5628685  Gross horsepower
#3   wt   3.21725  0.9784574  Weight (1000lbs)

最新更新