【发布时间】:2017-08-25 07:32:59
【问题描述】:
如果我的标题不是很好,我很抱歉,如果有人有更好的,请改进它。
我目前正在努力使用新的 dplyr 0.7,它可以使用 dplyr 在我自己的函数中使用变量。我不知道我的尝试是不可能的,还是我用错了方法。
我有一个简单的数据框,每家公司一行,每家公司都有一堆 2015 年和 2014 年的变量:
evo <- data.frame(id=1:5,
CA2015 = c(1200,1500,1550,200,0),
CA2014 = c(800,50,654,8555,0),
VA2015 = c(6984,6588,633,355,84),
VA2014 = c(35,358,358,1331,86))
我希望能够为我的每个变量创建一个“evo”变量,它基本上是 2015 年的值减去 2013 年的值。
在我的示例中,我想得到一个名为 evoCA 的变量,它等于 CA2015 - CA2014,以及一个名为 evoVA 的变量,它等于 VA2015 - VA2014。
(基本上:
evo %>%
mutate(evoCA= CA2015 - CA2014,
evoVA = VA2015 - VA2014)
)
所以我尝试创建一个函数,将我想要比较的变量的名称作为参数,但我无法使其工作。这是我能做的最好的:
addEvo <- function(table,var,var2014,var2015) {
var <- enquo(var)
var2014 <- enquo(var2014)
var2015 <- enquo(var2015)
evoName <- paste0("evo",var)[2]
table %>%
mutate(!!evoNom := (!!var2015) - (!!var2013)) %>%
return()
}
但这不是很干净,因为我不仅要传递变量名,还要传递带有后缀的变量。
有什么办法让它变得更好吗?
【问题讨论】:
-
你的最终目标是什么,你想遍历多个前缀还是多年,或者两者兼而有之?
-
@RobinGertenbach : 多个前缀,我有很多变量但只有两年。
-
你有多少个前缀?您的目标是循环应用
addEvo的变量?我认为有一种方法可以添加所有 evo 列,但是您的函数需要更多的行... -
大约 20 个前缀