首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从attr中提取R中的数据标签,并添加为列,以对应于变量/列名

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

Stack Overflow用户
提问于 2020-01-25 02:53:21
回答 1查看 138关注 0票数 0

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

代码语言:javascript
复制
label(mtcars[["mpg"]]) <- "Miles/(US) gallon"
label(mtcars[["hp"]]) <- "Gross horsepower"
label(mtcars[["wt"]]) <- "Weight (1000lbs)"

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

代码语言:javascript
复制
mtcars  %>% select(mpg, hp, wt) %>% pivot_longer(everything()) %>% group_by(name) %>% summarise(mean=mean(value, na.rm = TRUE), sd=sd(value, na.rm=TRUE)) 

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

代码语言:javascript
复制
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而不是标签的列。

EN

回答 1

Stack Overflow用户

发布于 2020-01-25 02:58:23

我们可以使用imap

代码语言:javascript
复制
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

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59902154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档