【问题标题】:lm() with ifelse() statement - Rlm() 与 ifelse() 语句 - R
【发布时间】:2019-03-05 20:50:58
【问题描述】:

假设我有这个数据框:

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 的外部值,它可以取值01df2 只有一行)。正如你在上面看到的,如果df2$if_a == 1我需要运行第一个“包”变量,而如果它等于0,我需要运行另一个“包”变量。

我试过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 = 参数服从外部源的值。

有什么建议吗?

【问题讨论】:

  • df2 只有一行吗?或者它的行数是否与df 相同?如果您的示例定义了所有变量,这将很有帮助,所以它实际上是 reproducible

标签: r formula linear-regression lm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多