数据框线性拟合

时间:2012-10-03 21:34:55

标签: r dataframe

假设我有一堆包含多列的数据框。我需要在第1列和第2列,第1列和第3列上调用lm函数,依此类推。所以基本上我需要遍历所有列并在构建模型时存储拟合的结果。我遇到的问题是:

lm(df[1]~df[2], data = df) #doesnt work. In this case df is the data frame object 
                           #and df[1] is the first column. 

在循环中执行此操作的好方法是什么,例如以迭代方式访问df的列?

2 个答案:

答案 0 :(得分:2)

这里有一个df第一列的例子,它作为因变量对着所有其他列回归,我认为这就是你想要的......

x<-1:5
y<-5:1
df<-data.frame(x,y,x,y,x,y)
df1<-df[,1]
df2<-df[,2:6]
resultslist<-lapply(df2,function(x) (lm(df1~x)))

如果您对所需的系数/输出更具体,那么这个答案可能会更好

答案 1 :(得分:1)

鉴于您似乎希望循环使用适合单项线性模型的多个列,并且响应是data.frame中的第一列,以下内容将起作用

dat <- data.frame(matrix(rnorm(110),ncol=11))
.names <- names(dat)
.formulae <- lapply(.names[-1], reformulate, response = .names[1])
results_list <- lapply(.formulae, lm, data = dat)