作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了很多与我类似的问题,但只解决了我问题的一部分。我正在使用带有标准评估的 dplyr 来容纳变量名。这适用于管道中的 filter_ 和 group_by_。但是,总而言之,我不能为要求和的指标指定变量名。一个例子会很清楚。
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))))
我尝试了很多涉及 as.name() 或 interp() 的不同方法,但似乎没有任何效果。
最佳答案
在仔细研究了 NSE 小插图一段时间后,我发现如果您使用 .dots
,则可以在 summarise_
中使用 setNames
> 参数并将 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
您还可以添加一个rename_
步骤来做同样的事情。我认为这不太理想,因为它依赖于了解您在 summarise_
中使用的名称。但是,如果您总是使用相同的名称,例如 variable_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
关于r - dplyr标准评估: summarise_ with variable name for summed variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32098239/
我想创建一个简单的函数,它将使用 summarise_ 和 group_by_ 函数。我知道非标准评估存在问题,但我可以修复它。 library(dplyr) test_function %
我遇到了很多与我类似的问题,但只解决了我问题的一部分。我正在使用带有标准评估的 dplyr 来容纳变量名。这适用于管道中的 filter_ 和 group_by_。但是,总而言之,我不能为要求和的指标
我是一名优秀的程序员,十分优秀!