Извлечение меток данных в R из attr и добавление в качестве столбца, чтобы соответствовать имени переменной / столбца - PullRequest
0 голосов
/ 24 января 2020

У меня очень большой набор данных с супер сокращенными именами переменных, и было бы очень полезно, если бы метка в разделе 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 вместо этикетки.

1 Ответ

1 голос
/ 24 января 2020

Мы можем использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...