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