2017-12-18 17 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'로 둘러 쌉니다. 사실,'as.integer (Petal.Width! = lag (Petal.Width))'는 조금 더 가독성이 있습니다.하지만 여전히 생각할지라도'c (NA, diff (Petal.Width)! = 0)' – alistaire

+0

hm입니다. 그게 뭔지라면 논리로 남겨 두는 것이 낫다 – 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

이것은 정말 좋은 해결책이다. –