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