首页 > 解决方案 > 根据列值创建具有数字序列的行

问题描述

我有一个数据集,其中行序列与一个客户端相关。每个客户端的最后一行是“状态正常”。因此,我的数据由块组成,每个块都与一个客户相关。我需要创建一个列来显示所有块行中的客户端数量。例如我的数据是:

x = data.frame(A = c('name1', 'address1', 'status1', 'name2', 'address2', 'status2'), B= c('John', 'Texas', 'OK', 'William', 'Florida', 'OK')) x

我的预期输出是:

x = data.frame(A = c('name1', 'address1', 'status1', 'name2', 'address2', 'status2'), B = c('John', 'Texas', 'OK', 'William', 'Florida', 'OK'), C = c('1', '1', '1', '2', '2', '2')) x

谢谢。

标签: r

解决方案


您可以使用cumsum

library(dplyr)
x %>% mutate(C = lag(cumsum(B == 'OK'), default = 0) + 1)

#         A       B C
#1    name1    John 1
#2 address1   Texas 1
#3  status1      OK 1
#4    name2 William 2
#5 address2 Florida 2
#6  status2      OK 2

推荐阅读