根据列值创建一个顺序为nymber的行

时间:2020-06-30 13:24:10

标签: r

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

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

谢谢。

3 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

您只需提取客户端ID:

x$C <- stringr::str_extract(x$A, "[0-9]+")

答案 2 :(得分:0)

另一个选择:

x$C <- as.numeric(gsub('[^0-9]', "", x$A))