在 dplyr 中使用参数作为列名
Using parameters as col names in dplyr
我正在努力混合使用参数和直接来自数据框的引用列名。请帮助我将第二个函数更正为 return 与第一个
相同的结果
install.packages("dplyr", version = "0.5.0")`
library(dplyr)
df <- data.frame(year = 2010:2015, GVA = 1:6)
f <- function(df) {
df %>%
mutate(indexGVA = GVA/max(ifelse(year == 2010, GVA, 0)) * 100)
}
f(df)
g <- function(df, val = NULL) {
df %>%
mutate_(indexGVA = ~val/max(ifelse(year == 2010, val, 0)) * 100)
}
g(df, val = "GVA")
mutate_
现已弃用 (?mutate_
),您可以改为使用 rlang
中的 enquo
和 !!
来引用和取消引用参数:
library(rlang)
g <- function(df, val = NULL) {
val_quo = enquo(val)
df %>%
mutate(indexGVA = (!! val_quo)/max(ifelse(year == 2010, (!! val_quo), 0)) * 100)
}
g(df, val = GVA)
结果:
year GVA indexGVA
1 2010 1 100
2 2011 2 200
3 2012 3 300
4 2013 4 400
5 2014 5 500
6 2015 6 600
我正在努力混合使用参数和直接来自数据框的引用列名。请帮助我将第二个函数更正为 return 与第一个
相同的结果install.packages("dplyr", version = "0.5.0")`
library(dplyr)
df <- data.frame(year = 2010:2015, GVA = 1:6)
f <- function(df) {
df %>%
mutate(indexGVA = GVA/max(ifelse(year == 2010, GVA, 0)) * 100)
}
f(df)
g <- function(df, val = NULL) {
df %>%
mutate_(indexGVA = ~val/max(ifelse(year == 2010, val, 0)) * 100)
}
g(df, val = "GVA")
mutate_
现已弃用 (?mutate_
),您可以改为使用 rlang
中的 enquo
和 !!
来引用和取消引用参数:
library(rlang)
g <- function(df, val = NULL) {
val_quo = enquo(val)
df %>%
mutate(indexGVA = (!! val_quo)/max(ifelse(year == 2010, (!! val_quo), 0)) * 100)
}
g(df, val = GVA)
结果:
year GVA indexGVA
1 2010 1 100
2 2011 2 200
3 2012 3 300
4 2013 4 400
5 2014 5 500
6 2015 6 600