如何构建一个不知道数据框中列名的线性模型?

时间:2015-02-27 17:18:32

标签: r

我需要在给定数据框的情况下构建线性模型:

structure(list(cpu = c(6, 10, 20), Date = c(1425031717000, 1425031957000, 
1425032197000)), .Names = c("cpu", "Date"), row.names = c(NA, 
3L), class = "data.frame")

在这种情况下,我知道我可以这样做的列名:

lm(cpu~Date, data=dat)

我需要动态生成列名。我需要创建一个函数,当我准备调用lm函数时需要从数据框中提取列名。列名可以是任何内容,具体取决于数据框。

我试过了;

lm(names(dat[1])~names(dat[2]), data=dat)

我收到此错误:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels
In addition: Warning message:
In model.response(mf, "numeric") : NAs introduced by coercion

4 个答案:

答案 0 :(得分:3)

如果你不关心在resutls中有列的名字,你可以使用:

lm(dat[[1]]~dat[[2]])

答案 1 :(得分:2)

通过输入?formula找到的帮助说

  

数据框有一个公式方法。如果只有一个   这列形成了具有空LHS的RHS。对于更多列,   第一列是公式的LHS和其余列   由+形成RHS。

formula(dat)作为lm的第一个arg,它是这样做的:

lm(formula(dat),data=dat)

导致

Call:
lm(formula = formula(dat), data = dat)

Coefficients:
(Intercept)         Date  
 -4.156e+07    2.917e-05  

答案 2 :(得分:2)

lm(as.formula(paste(names(dat)[1],names(dat)[2],sep="~")), data=dat)

Call:
lm(formula = as.formula(paste(names(dat)[1], names(dat)[2], sep = "~")), 
    data = dat)

Coefficients:
(Intercept)         Date  
 -4.156e+07    2.917e-05  

答案 3 :(得分:1)

假设您要使用您创建的所有变量,请使用&#34; 〜。 &#34;在R. Else中,您可以修改循环以仅保留您需要的字段。

    Df <- structure(list(cpu ..--your data---)

    ##for loop##

    vars=colnames(Df)[-1]
    for (i in vars) {
    lm.fit <- lm(paste("cpu ~", i), data=Df)
    }

    summary(lm.fit)