根据另一列中的任何先前值更改列

问题描述

我有一个像这样的数据框:

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))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...