R - 访问公式变量
R - Access to formula variables
我需要对公式的每个变量执行循环。我的公式是:
> lr$formula
target ~ grupoAntig + nu_seguros_1TRUNC + cd_sexo + grupoEdad +
vl_limite_aeQU + vl_ltd_6QU + Revolv3 + nu_servicios_1TRUNC +
fl_cliente_hit + nu_resumen_6 + fl_rv
我想 运行 每个变量的 ddply。像下面的 'grupoAntig':
> ddply(muestra, .(grupoAntig), summarise, ratioTarget=sum(target)/length(target))
grupoAntig ratioTarget
1 20a40 0.01038062
2 h20 0.01201201
3 m40 0.00785325
所以我开始创建一个变量列表:
formula<-gsub(" ", "",as.character(lr$formula))
vars<-unlist(strsplit(formula, "[+]"))
如果我选择 vars[3],我会得到:
> vars[3]
[1] "grupoAntig"
而在ddply(plyr库)中我需要引入没有分号的变量名。所以我尝试了:
> as.name(vars[3])
grupoAntig
但是当我在 ddply 中尝试它时:
library(plyr)
ddply(muestra, .(as.name(vars[3])), summarise, ratioTarget=sum(target)/length(target))
我收到一条错误消息:
Error in unique.default(x) :
如何在ddply中使用每个变量名?
无需纠结 gsub()
和 strsplit()
即可从公式中获取值。您可以使用 all.vars()
.
获取所有公式变量
x <- target ~ grupoAntig + nu_seguros_1TRUNC + cd_sexo + grupoEdad +
vl_limite_aeQU + vl_ltd_6QU + Revolv3 + nu_servicios_1TRUNC +
fl_cliente_hit + nu_resumen_6 + fl_rv
all.vars(x)
# [1] "target" "grupoAntig" "nu_seguros_1TRUNC"
# [4] "cd_sexo" "grupoEdad" "vl_limite_aeQU"
# [7] "vl_ltd_6QU" "Revolv3" "nu_servicios_1TRUNC"
# [10] "fl_cliente_hit" "nu_resumen_6" "fl_rv"
此外,您可以在 ddply()
中使用角色名称,因此不需要 .()
或 as.name()
。从 ?ddply
-
.variables
variables to split data frame by, as as.quoted
variables, a formula or character vector
这是一个 mtcars
的例子。
ddply(mtcars, "cyl", summarise, sumMpg = sum(mpg))
# cyl sumMpg
# 1 4 293.3
# 2 6 138.2
# 3 8 211.4
同
ddply(mtcars, .(cyl), summarise, sumMpg = sum(mpg))
# cyl sumMpg
# 1 4 293.3
# 2 6 138.2
# 3 8 211.4
我需要对公式的每个变量执行循环。我的公式是:
> lr$formula
target ~ grupoAntig + nu_seguros_1TRUNC + cd_sexo + grupoEdad +
vl_limite_aeQU + vl_ltd_6QU + Revolv3 + nu_servicios_1TRUNC +
fl_cliente_hit + nu_resumen_6 + fl_rv
我想 运行 每个变量的 ddply。像下面的 'grupoAntig':
> ddply(muestra, .(grupoAntig), summarise, ratioTarget=sum(target)/length(target))
grupoAntig ratioTarget
1 20a40 0.01038062
2 h20 0.01201201
3 m40 0.00785325
所以我开始创建一个变量列表:
formula<-gsub(" ", "",as.character(lr$formula))
vars<-unlist(strsplit(formula, "[+]"))
如果我选择 vars[3],我会得到:
> vars[3]
[1] "grupoAntig"
而在ddply(plyr库)中我需要引入没有分号的变量名。所以我尝试了:
> as.name(vars[3])
grupoAntig
但是当我在 ddply 中尝试它时:
library(plyr)
ddply(muestra, .(as.name(vars[3])), summarise, ratioTarget=sum(target)/length(target))
我收到一条错误消息:
Error in unique.default(x) :
如何在ddply中使用每个变量名?
无需纠结 gsub()
和 strsplit()
即可从公式中获取值。您可以使用 all.vars()
.
x <- target ~ grupoAntig + nu_seguros_1TRUNC + cd_sexo + grupoEdad +
vl_limite_aeQU + vl_ltd_6QU + Revolv3 + nu_servicios_1TRUNC +
fl_cliente_hit + nu_resumen_6 + fl_rv
all.vars(x)
# [1] "target" "grupoAntig" "nu_seguros_1TRUNC"
# [4] "cd_sexo" "grupoEdad" "vl_limite_aeQU"
# [7] "vl_ltd_6QU" "Revolv3" "nu_servicios_1TRUNC"
# [10] "fl_cliente_hit" "nu_resumen_6" "fl_rv"
此外,您可以在 ddply()
中使用角色名称,因此不需要 .()
或 as.name()
。从 ?ddply
-
.variables
variables to split data frame by, asas.quoted
variables, a formula or character vector
这是一个 mtcars
的例子。
ddply(mtcars, "cyl", summarise, sumMpg = sum(mpg))
# cyl sumMpg
# 1 4 293.3
# 2 6 138.2
# 3 8 211.4
同
ddply(mtcars, .(cyl), summarise, sumMpg = sum(mpg))
# cyl sumMpg
# 1 4 293.3
# 2 6 138.2
# 3 8 211.4