根据另一列中的任何先前值更改列
Change on column based on any previous values in another column
我有一个这样的数据框:
foo <- c(rep(FALSE, 5), TRUE, rep(FALSE, 4))
rank_order <- seq(11,20)
df <- data.frame(rank_order = as.numeric(rank_order),
foo = foo)
我想做的是在 df$foo == TRUE
的行后面的 rank_order
的每个值上加一。这意味着 rank_order
应该是这样的:
rank_order_target <- c(11, 12, 13, 14, 15, 17, 18, 19, 20, 21)
更改 rank_order
的一个值很容易,lag
查看 foo
的一个先前值(如下所示),但我如何查看所有先前值foo
?
df %>%
mutate(rank_order_new = case_when(lag(foo, default = FALSE) == TRUE ~ rank_order + 1,
TRUE ~ rank_order))
rank_order foo rank_order_new
1 11 FALSE 11
2 12 FALSE 12
3 13 FALSE 13
4 14 FALSE 14
5 15 FALSE 15
6 16 TRUE 16
7 17 FALSE 18
8 18 FALSE 18
9 19 FALSE 19
10 20 FALSE 20
base
解决方案或 tidyverse
的解决方案都会有所帮助。
我们可以使用cumsum
library(dplyr)
df %>%
mutate(new = rank_order + cumsum(foo))
我有一个这样的数据框:
foo <- c(rep(FALSE, 5), TRUE, rep(FALSE, 4))
rank_order <- seq(11,20)
df <- data.frame(rank_order = as.numeric(rank_order),
foo = foo)
我想做的是在 df$foo == TRUE
的行后面的 rank_order
的每个值上加一。这意味着 rank_order
应该是这样的:
rank_order_target <- c(11, 12, 13, 14, 15, 17, 18, 19, 20, 21)
更改 rank_order
的一个值很容易,lag
查看 foo
的一个先前值(如下所示),但我如何查看所有先前值foo
?
df %>%
mutate(rank_order_new = case_when(lag(foo, default = FALSE) == TRUE ~ rank_order + 1,
TRUE ~ rank_order))
rank_order foo rank_order_new
1 11 FALSE 11
2 12 FALSE 12
3 13 FALSE 13
4 14 FALSE 14
5 15 FALSE 15
6 16 TRUE 16
7 17 FALSE 18
8 18 FALSE 18
9 19 FALSE 19
10 20 FALSE 20
base
解决方案或 tidyverse
的解决方案都会有所帮助。
我们可以使用cumsum
library(dplyr)
df %>%
mutate(new = rank_order + cumsum(foo))