【问题标题】:How do I paste a column from a R dataframe in a loop for a formula using the $?如何使用 $ 将 R 数据框中的列粘贴到公式的循环中?
【发布时间】:2019-10-09 15:11:45
【问题描述】:

我需要使用 $ 符号将数据框列粘贴为 R 中的公式的帮助。

df1 <- data.frame(id1 = c(1, 2, 3, 4, 5),
              id2 = c(1, 2, 3, 4, 5),
              var1 = c(3,6,6,9,5),
              var2 = c(1, 1, 0, 0, 1))
rownames(df1)<-c("first","second","third","fourth","fifth")

trait=c("id1","id2")
list=as.character("var1","var2")

for(i in trait){
  fit <- lm(df1[,i]~df1$list[2])
}

我想粘贴 lm 的第二部分 (df1$list[2])。在 $ 之后,我希望它粘贴字符向量列表的相应元素。

【问题讨论】:

  • can't use $ with variables。使用更通用的[ 索引运算符。
  • 好吧,我查看了它并像这样替换了 t:fit
  • 为什么它不起作用,因为它们不是来自同一个数据框?你得到什么错误?我假设两个数据框的行数相同,否则回归将没有任何意义。
  • 当我替换上面评论中提到的行时出现以下错误:[.data.frame(df1, , list[2]) 中的错误:选择了未定义的列
  • 另一个不错的选择是for(i in seq_along(trait)) {fit &lt;- lm(reformulate(list[i], trait[i]), df1); print(fit)}

标签: r loops paste anova


【解决方案1】:

lm 可以同时运行多个左侧:

lm(cbind(id1, id2) ~ var1 + var2, f1)

给予:

Call:
lm(formula = cbind(id1, id2) ~ var1 + var2, data = f1)

Coefficients:
             id1      id2    
(Intercept)  0.09091  0.09091
var1         0.45455  0.45455
var2         0.45455  0.45455

【讨论】:

  • 谢谢,但我的问题是列表元素是必不可少的。我试过了,但它不起作用: list=as.character("var1","var2") lm(as.formula(paste(id1 ~ list[2])), data = df1)
【解决方案2】:

最适合我的答案是上面 MrFlick 的答案:

for(i in seq_along(trait)) {
fit <- lm(reformulate(list[i], trait[i]), df1); print(fit)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多