dplyr标准评估:使用变量名对汇总变量进行汇总

dplyr标准评估:使用变量名对汇总变量进行汇总,r,dplyr,lazy-evaluation,summarization,R,Dplyr,Lazy Evaluation,Summarization,我问了很多与我类似的问题,但只解决了我问题的一部分。我使用带有标准求值的dplyr来容纳变量名。这适用于管道中的过滤器和分组方式。但是,对于summary,我不能为我正在求和的度量使用变量名。举例说明 library(dplyr) library(lazyeval) # create data a <- data.frame( x = c(2010, 2010, 2011, 2011, 2011), y_zm = c(rep(10, 5)), y_r2 = c(rep(20,

我问了很多与我类似的问题,但只解决了我问题的一部分。我使用带有标准求值的dplyr来容纳变量名。这适用于管道中的过滤器和分组方式。但是,对于summary,我不能为我正在求和的度量使用变量名。举例说明

library(dplyr)
library(lazyeval)

# create data
a <- data.frame(
  x = c(2010, 2010, 2011, 2011, 2011),
  y_zm = c(rep(10, 5)),
  y_r2 = c(rep(20, 5)))

# define variable names
tag <- "2011"
metric <- "y"
run1 <- "zm"
run2 <- "r2"

# working example for a pipe with fixed variable name
a %>%
  filter_(~x == tag) %>%
  group_by_(tag) %>%
  summarise_(variable_name = interp(~sum(var, na.rm = T), 
                                    var = as.name(paste0(metric,"_",run1))))

# non-working example of what I want to do
a %>%
  filter_(~x == tag) %>%
  group_by_(tag) %>%
  summarise_(as.name(paste0(metric,"_",run1)) = 
               interp(~sum(var, na.rm = T), 
                      var = as.name(paste0(metric,"_",run1))))
库(dplyr)
图书馆(懒汉)
#创建数据
a%
分组人(标签)%>%
摘要(如.name(paste0(公制“,”运行1))=
interp(~sum(var,na.rm=T),
var=as.name(paste0(度量,“"”,run1)))

我尝试了许多涉及as.name()或interp()的不同方法,但似乎没有任何效果。

在仔细研究了一段时间的NSE小插曲之后,我发现如果使用
.dots
参数并将
interp
放入列表中,您可以在
摘要中使用
设置名称

a %>%
    filter_(~x == tag) %>%
    group_by_(tag) %>%
    summarise_(.dots = setNames(list(interp(~sum(var, na.rm = TRUE),
                                            var = as.name(paste0(metric,"_",run1)))), 
                                                            paste0(metric,"_",run1)))

Source: local data frame [1 x 2]

  2011 y_zm
1 2011   30
您还可以添加一个
重命名
步骤来执行相同的操作。我认为这不太理想,因为它依赖于知道您在
摘要中使用的名称。但是,如果您总是使用相同的名称,如
variable\u name
,在某些情况下,这似乎是一个可行的选择

a %>%
    filter_(~x == tag) %>%
    group_by_(tag) %>%
    summarise_(variable_name = interp(~sum(var, na.rm = T), 
                                         var = as.name(paste0(metric,"_",run1)))) %>%
    rename_(.dots = setNames("variable_name", paste0(metric,"_",run1)))

Source: local data frame [1 x 2]

  2011 y_zm
1 2011   30

也许只需添加一个
rename\uu
步骤a la?它可能看起来像
rename(.dots=setNames(“variable\u name”,paste0(metric,“\u”,run1))
。我还不完全理解答案,但它就像一个符咒。谢谢!我必须深入到dplyr文档中才能掌握它。是我还是dplyr SE只是我painfull@MySchizoBuddy字体我也有同样的印象。当你硬编码这个名字时,如果你不。。。