代码之家  ›  专栏  ›  技术社区  ›  drmariod

在dplyr摘要中使用变量列名

  •  2
  • drmariod  · 技术社区  · 6 年前

    我发现这个问题已经问过了,但没有得到正确的答案。 R using variable column names in summarise function in dplyr

    as.name 以文本形式提供列名,但这在这里不起作用。。。

    使用fix列名可以工作。

    x <- c('a','b')
    df <- group_by(data.frame(a=c(1,2,3,4), b=c(2,3,4,5), c=c(1,1,2,2)), c)
    df %>% summarise(mean(a) - mean(b))
    

    df %>% summarise(mean(x[1]) - mean(x[2]))
    df %>% summarise(mean(as.name(x[1])) - mean(as.name(x[2])))
    

    因为三年前就有人问过这个问题 dplyr 正在良好的发展中,我想知道现在是否有答案。

    1 回复  |  直到 6 年前
        1
  •  5
  •   moodymudskipper    6 年前

    你可以用 base::get

    df %>% summarise(mean(get(x[1])) - mean(get(x[2])))
    
    # # A tibble: 2 x 2
    #        c `mean(a) - mean(b)`
    #    <dbl>               <dbl>
    # 1     1                  -1
    # 2     2                  -1
    

    get 默认情况下将在当前环境中搜索。

    正如错误信息所说, mean as.name 返回名称:

    class(as.name("a")) # [1] "name"
    

    你可以评估你的名字,那也行:

    df %>% summarise(mean(eval(as.name(x[1]))) - mean(eval(as.name(x[2]))))
    # # A tibble: 2 x 2
    #       c `mean(eval(as.name(x[1]))) - mean(eval(as.name(x[2])))`
    #   <dbl>                                                   <dbl>
    # 1     1                                                      -1
    # 2     2                                                      -1