在循环中使用dplyr :: filter创建新数据框

时间:2018-06-21 14:36:16

标签: r for-loop dplyr linearmodels

我有一个要拟合双线性模型的数据集。但是,我也希望找到过渡点的理由。

我想遍历过渡点的可能值,使用dplyr :: filter()分离数据,然后将线性模型拟合到2个新数据集中。

在此之后,我认为我可以为两个线性模型计算R平方值的总和。然后,我将选择R平方值总和最高的过渡点。我希望这将为两个线性模型提供最佳的平均拟合过渡点。

...但是,当我运行以下代码时,出现以下错误:

错误:

'lm.fit(x,y,offset = offset,singular.ok = singular.ok,...)中的错误:0(非NA)情况'

代码:

simpleTable<-data.frame(a=rep('group 1',10),
b=c(1,2,2.5,3,3.5,4.5,5,7,8,10),
c=c(8,15,18,19,22,24,25,29,31,35))

DF<- data.frame(k=1, Rsq.total=0); 
for (k in seq(from=0, to=10, by=0.1)){

  for (j in seq(from=1, to=length(simpleTable$a), by=1)){
    if(simpleTable$b[j]<=k){
      simpleTable$b1[j]<-simpleTable$b[j]; simpleTable$b2[j]<-0
    } else {simpleTable$b1[j]<-0; simpleTable$b2[j]<-simpleTable$b[j]}
  }

  simpleTable.1<-simpleTable %>% dplyr::filter(simpleTable$b1 != 0)
  simpleTable.2<-simpleTable %>% dplyr::filter(simpleTable$b2 != 0)

  LinMod.1<-lm(c ~ b1, data=simpleTable.1); Rsq.1<-summary(LinMod.1)$r.squared
  LinMod.2<-lm(c ~ b2, data=simpleTable.2); Rsq.2<-summary(LinMod.2)$r.squared

  Rsq.total<-Rsq.1+Rsq.2
  newRow<-data.frame(k, Rsq.total); DF<-rbind(DF, newRow)

}  

此示例包含伪数据,但我认为它描述了我的问题。 任何帮助表示赞赏。

0 个答案:

没有答案