【问题标题】:R - Access to formula variablesR - 访问公式变量
【发布时间】:2015-11-05 18:32:48
【问题描述】:

我需要对公式的每个变量执行循环。我的公式是:

> 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))

我收到一条错误消息:

unique.default(x) 中的错误:

如何在 ddply 中使用每个变量名?

【问题讨论】:

    标签: r loops text character plyr


    【解决方案1】:

    无需纠结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 -

    .变量
    用于拆分数据帧的变量,如as.quoted 变量、公式或字符向量

    这是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
    

    【讨论】:

      猜你喜欢
      • 2012-12-28
      • 2019-06-09
      • 2014-04-05
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      相关资源
      最近更新 更多