【问题标题】:Using column numbers not names in lm()在 lm() 中使用列号而不是名称
【发布时间】:2011-12-06 05:42:23
【问题描述】:

我想按编号而不是名称指定列,而不是 lm(bp~height+age, data=mydata) 之类的东西。

我尝试了lm(mydata[[1]]~mydata[[2]]+mydata[[3]]),但问题在于,在拟合模型中,系数被命名为mydata[[2]]mydata[[3]] 等,而我希望它们具有真实的列名。

也许这是一个没有你的蛋糕和吃它的情况,但如果专家能建议这是否可能,我将不胜感激

【问题讨论】:

  • 如果您为您正在尝试做的事情提供稍微大一点的上下文,您可能会得到更好的答案:“您要解决的问题是什么”?
  • 感谢您的评论。我在数据框中有大量列。我正在使用其中的一个子集拟合一个线性模型,使用包括逐步选择在内的各种技术。如果我可以在调用 lm() 时按编号引用列会很方便,但如果可能的话,我希望模型显示列名。
  • 我会根据名称粘贴一个公式,如:stackoverflow.com/questions/6877534/…
  • 如果您想出一个好的解决方案,您可以(鼓励)发布您自己问题的答案...

标签: r formula lm


【解决方案1】:
lm(
    as.formula(paste(colnames(mydata)[1], "~",
        paste(colnames(mydata)[c(2, 3)], collapse = "+"),
        sep = ""
    )),
    data=mydata
)

除了c(2, 3),你可以使用你想要的索引数量(不需要for循环)。

【讨论】:

  • 第三行末尾缺少逗号?
  • 谢谢,@Ben。此外,也许使用as.formula 会更健壮,尽管lm() 不需要(但其他模型需要)。
  • 谢谢。这说明了 Ben Bolker 之前的建议,并且效果很好。
  • 为了做到这一点,我需要在列名周围添加反引号,因为名称中有特殊字符:paste('`', colnames(mydata)[c(2,3)], '`', sep = "", collapse = "+")
猜你喜欢
  • 2013-07-11
  • 2021-09-09
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 2021-06-05
相关资源
最近更新 更多