2017-12-18 24 views
0

虹彩テーブルに追加の列を入れたいので、同じ種内で最初の行はNAで、残りの行は1です.Petal.Widthが最後の行(上記の行)、またはPetal.Widthが最後の行と異なる場合は0です。dplyr行ごとに条件付きの突然変異操作を行う方法

dplyrでこれを達成するにはどうすればよいですか?下の列の変更が必要です。

Sepal.Length Sepal.Width Petal.Length Petal.Width Species Change 
1   5.1   3.5   1.4   0.2 setosa NA 
2   4.9   3.0   1.4   0.2 setosa 0 
3   4.7   3.2   1.3   0.2 setosa 0 
4   4.6   3.1   1.5   0.2 setosa 0 
5   5.0   3.6   1.4   0.2 setosa 0 
6   5.4   3.9   1.7   0.4 setosa 1 
+0

'アイリス%>%GROUP_BY(種)%>%(変更= Petal.Widthを - ラグ(Petal.Width)!= 0)に変異を' ;あなたが好きなら 'as.integer'で囲みます。同様に、 'c(NA、diff(Petal.Width)!= 0)' – alistaire

+0

hm、実際には 'as.integer(Petal.Width!= lag(Petal.Width))'はもう少し読みやすいですが、私はまだ考えていますそれが論理的であれば残しておく方が良いです – alistaire

答えて

3

dplyrlag()機能があります。

iris %>% group_by(Species) %>% 
    mutate(Change = ifelse(lag(Petal.Width)==Petal.Width,0,1)) 

# A tibble: 150 x 6 
# Groups: Species [3] 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species Change 
      <dbl>  <dbl>  <dbl>  <dbl> <fctr> <dbl> 
1   5.1   3.5   1.4   0.2 setosa  NA 
2   4.9   3.0   1.4   0.2 setosa  0 
3   4.7   3.2   1.3   0.2 setosa  0 
4   4.6   3.1   1.5   0.2 setosa  0 
5   5.0   3.6   1.4   0.2 setosa  0 
6   5.4   3.9   1.7   0.4 setosa  1 
7   4.6   3.4   1.4   0.3 setosa  1 
8   5.0   3.4   1.5   0.2 setosa  1 
9   4.4   2.9   1.4   0.2 setosa  0 
10   4.9   3.1   1.5   0.1 setosa  1 
+0

これは本当に素晴らしい解決策です –

関連する問題