如何解决根据另一列中的任何先前值更改列
我有一个像这样的数据框:
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)
我想做的是在rank_order
行之后的每个df$foo == TRUE
值中加一个。这意味着rank_order
应该看起来像这样:
rank_order_target <- c(11,12,13,14,15,17,18,19,20,21)
更改rank_order
的一个值很容易,而lag
会查看foo
的一个先前值(如下所示),但是如何查看{ {1}}?
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
这样的解决方案。
解决方法
我们可以使用cumsum
library(dplyr)
df %>%
mutate(new = rank_order + cumsum(foo))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。