dplyr如何进行rowwise条件mutate操作

时间:2017-12-18 19:39:02

标签: r dplyr tidyverse

我希望在iris表中有额外的列,因此在同一物种中,第一行是NA,如果Petal.Width与最后一行(右上方的行)相同,则其余行为1,如果Petal.Width与最后一行不同,则为0;

如何使用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

1 个答案:

答案 0 :(得分:3)

dplyr有一个lag()函数:

 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