R ifelse在值之前和之后
以下是一个df示例: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
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
与basecumsum
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