代码之家  ›  专栏  ›  技术社区  ›  Chris

带有ifelse()语句的lm()-r

  •  0
  • Chris  · 技术社区  · 6 年前

    假设我有这个数据框:

    df <- data.frame(GN1 = sample(1:10, 10 ,replace=TRUE),
               GN2 = sample(1:10, 10 ,replace=TRUE),
               GN3 = sample(1:10, 10 ,replace=TRUE),
               E10 = sample(1:10, 10 ,replace=TRUE),
               PSV7 = sample(1:10, 10 ,replace=TRUE),
               PEC3 = sample(1:10, 10 ,replace=TRUE),
               PEC4 = sample(1:10, 10 ,replace=TRUE),
               AC6 = sample(1:10, 10 ,replace=TRUE),
               AC7 = sample(1:10, 10 ,replace=TRUE),
               stringsAsFactors = FALSE)
    
       GN1 GN2 GN3 E10 PSV7 PEC3 PEC4 AC6 AC7
    1    7   3  10   6    4    4    3   9   3
    2    2   5   6   6    6    6    5   7   1
    3    7   6  10   6    9    1    9   7   5
    4    7   1   8   9    2    4    5   5   7
    5    8   3   3   8    6    8    9   5  10
    6    7   1   1   8    9    3    8   9   4
    7    4   6   4   7    2    6    9   8   9
    8    7   8   8   7    2    1    7   6   5
    9    1   9   4   8    5    5    2   7   1
    10   4   9   2   1    4    4   10   2   9
    

    我想运行这个公式:

    c_SA=lm(formula = GN1 ~ ifelse(df2$if_a == 1,PEC3+PEC4+AC6,GN2+GN3+E10+PSV7+PEC3), data = df)
    

    在哪里? df2$if_a 是来自 df 它可以接受价值观 0 1 ( df2 只有一排)。如上图所示,如果 df2$if_a == 1 我需要运行第一个“pack”变量,如果它等于0,我需要运行另一个“pack”变量。

    我试过了 as.formula() reformulate() 没有成功:

    c_SA=lm(formula = GN1 ~ ifelse(df2$if_a == 1,as.formula(PEC3+PEC4+AC6),as.formula(GN2+GN3+E10+PSV7+PEC3)), data = df)
    

    还有一些类似的问题( 1 , 2 , 3 )但是,它们在 data = 争论,我需要 formula = 受外部源值限制的参数。

    有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Gregor Thomas    6 年前

    使用 if (未矢量化 ifelse ---由于您(希望)没有使用向量来选择所需的公式,而不是尝试在公式中使用它:

    my_formula = if (df2$if_a == 1) {
      GN1 ~ PEC3 + PEC4 + AC6
    } else {
     GN1 ~ GN2 + GN3 + E10 + PSV7 + PEC3
    }
    
    c_SA = lm(formula = my_formula, data = df)