我有一个非常大的数据集,其中的变量名称是超级缩写的,如果attr(*," label ")部分中的标签被提取出来并显示在相应变量旁边的列中,那将会有很大的帮助。
label(mtcars[["mpg"]]) <- "Miles/(US) gallon"
label(mtcars[["hp"]]) <- "Gross horsepower"
label(mtcars[["wt"]]) <- "Weight (1000lbs)"我当前的代码只是从整个数据集中获取mean/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)我找到了一个可以得到我想要的内容的thread,但是如果我在代码的末尾添加mutate(labels=label(mtcars)[name]),我会得到一个包含NA而不是标签的列。
发布于 2020-01-25 02:58:23
我们可以使用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)https://stackoverflow.com/questions/59902154
复制相似问题