2017-08-10 9 views
1

私がしようとしていることを説明するために、私は例としてダイヤモンドデータセットを使用しています。 group_by(cut)の後、各グループの平均深さに応じて、各グループに対してlmを実行してから、モデルをデータフレームに保存します。dplyrチェーンのgroup_byの後のif if else ..}文

diamonds %>% group_by(cut) %>% 
      mutate(mean.depth=mean(depth)) %>% 
      {if (.$mean.depth>60) do(model=lm(price~x, data=.)) 
       else do(model=lm(price~y, data=.))} 

これは私が得たものである:

Error in function_list[[k]](value) : object 'mean.depth' not found 

はそれを修正するために時間を過ごしたが、失敗しました。誰かが助けることができればそれを感謝しなさい。

+2

を私は(おそらく匿名関数で) – Gregor

+0

どうか 'について'を行う内部 'if'を()'置くところ(価格=〜x)else {価格〜y}、データ=。) '。 –

答えて

2
diamonds %>% 
    group_by(cut) %>% 
    do(model=if(mean(.$depth) > 60) 
       lm(price ~ x, data=.) 
      else lm(price ~ y, data=.)) 
1

はこのお試しください:

diamonds %>% group_by(cut) %>% 
    mutate(mean.depth=mean(depth), 
     form = ifelse(mean.depth>60, 
         "price~x", 
         "price~y")) %>% 
    do(model = lm(as.formula(.$form), data = .)) 
Source: local data frame [5 x 2] 
Groups: <by row> 

# A tibble: 5 x 2 

     cut model 
*  <ord> <list> 
1  Fair <S3: lm> 
2  Good <S3: lm> 
3 Very Good <S3: lm> 
4 Premium <S3: lm> 
5  Ideal <S3: lm>