如何使用mutate()创建一个变量,该变量的值等于给定变量的标签?

时间:2016-11-02 21:18:05

标签: r dplyr tidyr hmisc

我正在尝试使用mutate()data.frame使用gather()来创建一个变量,其值为label(),用于收集的variable }。我搜索过谷歌和StackOverflow,但没有找到合适的答案。我的研究让我认为可能需要进行标准评估。

这是一个可重复性最小的例子:

# Packages
library(dplyr)
library(Hmisc)
library(tidyr)
library(lazyeval)

df <- mtcars %>% 
tbl_df() %>%
slice(1)

label(df$mpg) <- "Miles per gallon"
label(df$cyl) <- "Cylinders"

df %>% 
select(mpg, cyl) %>%
gather(variable, value) %>% 
mutate_(.dots = interp(~attr(df$x, "label"), x = variable))

此代码生成:

# A tibble: 2 × 3
  variable value `attr(df$mpg, "label")`
     <chr> <dbl>                   <chr>
1      mpg    21        Miles per gallon
2      cyl     6        Miles per gallon

显然只获取mpg的标签。

我的目标是拥有类似的东西:

# A tibble: 2 × 3
      variable value `attr(df$variable, "label")`
         <chr> <dbl>                   <chr>
    1      mpg    21        Miles per gallon
    2      cyl     6        Cylinders

1 个答案:

答案 0 :(得分:1)

这是怎么回事?

df %>% 
    select(mpg, cyl) %>%
    gather(variable, value) %>% 
    mutate(labels = label(df)[variable])

# A tibble: 2 × 3
  variable value           labels
     <chr> <dbl>            <chr>
1      mpg    21 Miles per gallon
2      cyl     6        Cylinders