R ifelse在值之前和之后

R ifelse在值之前和之后,r,dplyr,tidyverse,R,Dplyr,Tidyverse,以下是一个df示例: test_df <- structure(list(plant_id = c("plant_1", "plant_1", "plant_1", "plant_1", "plant_1", "plant_2", "plant_2", "plant

以下是一个df示例:

test_df <- structure(list(plant_id = c("plant_1", "plant_1", "plant_1", "plant_1", "plant_1",
                                       "plant_2", "plant_2", "plant_2", "plant_2", "plant_2", 
                                       "plant_3", "plant_3", "plant_3", "plant_3", "plant_3",
                                       "plant_4", "plant_4", "plant_4", "plant_4", "plant_4"), 
                          skipped = c(0, 0, 0, 1, 0, 
                                      0, 0, 1, 0, 0,
                                      0, 0, 1, 0, 0, 
                                      0, 0, 1, 0,0)), 
                     row.names = c(NA, -20L), class = "data.frame", 
                     .Names = c("plant_sp", "skipped"))

test_df使用
dplyr::group_by
if_else
与base
cumsum

library(dplyr)
test_df %>%
  group_by(plant_sp) %>%
  mutate(skipped = if_else(cumsum(skipped) == 0, 0,
    if_else(skipped == 1, 1, 2))) %>%
  ungroup()
输出

# A tibble: 20 x 2
   plant_sp skipped
   <chr>      <dbl>
 1 plant_1        0
 2 plant_1        0
 3 plant_1        0
 4 plant_1        1
 5 plant_1        2
 6 plant_2        0
 7 plant_2        0
 8 plant_2        1
 9 plant_2        2
10 plant_2        2
11 plant_3        0
12 plant_3        0
13 plant_3        1
14 plant_3        2
15 plant_3        2
16 plant_4        0
17 plant_4        0
18 plant_4        1
19 plant_4        2
20 plant_4        2
#一个tible:20x2
跳过的植物
1工厂1 0
2工厂1 0
3工厂1 0
4工厂1 1
5工厂1 2
6工厂2 0
7工厂2 0
8工厂2 1
9工厂2
10工厂2
11工厂3 0
12工厂3 0
13工厂3 1
14工厂3 2
15工厂3 2
16工厂4 0
17工厂4 0
18工厂4 1
19工厂4 2
20工厂4 2