R 对列中的值建立索引
我有一个数据帧:R 对列中的值建立索引,r,dataframe,indexing,data.table,R,Dataframe,Indexing,Data.table,我有一个数据帧: dput(df) structure(list(ID = c("A1", "A1", "A1", "A1", "A1", "A1", "B2", "B2", "B2", "B2", "B2", "B2", "B2", &q
dput(df)
structure(list(ID = c("A1", "A1", "A1", "A1", "A1", "A1", "B2",
"B2", "B2", "B2", "B2", "B2", "B2", "B2", "B2", "B2"), operation = c("open",
"open", "close", "", "open", "close", "", "open", "open", "open",
"close", "upload", "open", "close", "open", "close")), class = "data.frame", row.names = c(NA,
-16L))
我想为列操作中的每个“打开”和“关闭”包添加索引。因此,对于打开和关闭之间的每一行,必须具有相同的索引。因此,期望的结果是:
ID operation index
A1 open 1
A1 open 1
A1 close 1
A1
A1 open 2
A1 close 2
B2
B2 open 3
B2 open 3
B2 open 3
B2 close 3
B2 upload
B2 open 4
B2 close 4
B2 open 5
B2 close 5
我是这样做的:
dt[, index := .GRP, by = .(rev(cumsum(rev(operation) == 'close')))]
dt[, index := ifelse(cumsum(operation == 'open') > 0, index, NA), by = .(ID, index)]
然而,我希望有两个选项“关闭”。它可以是“关闭”或“检查”:
我想得到:
ID operation index
A1 open 1
A1 open 1
A1 checking 1
A1
A1 open 2
A1 close 2
B2
B2 open 3
B2 open 3
B2 open 3
B2 close 3
B2 upload
B2 open 4
B2 close 4
B2 open 5
B2 close 5
如何添加此或选项?您可以使用%中的
%来检查多个值
library(data.table)
setDT(dt)
dt[, index := .GRP, by = .(rev(cumsum(rev(operation) %in% c('close', 'checking'))))]
dt[, index := ifelse(cumsum(operation == 'open') > 0, index, NA), by = .(ID, index)]
ID operation index
A1 open 1
A1 open 1
A1 checking 1
A1
A1 open 2
A1 close 2
B2
B2 open 3
B2 open 3
B2 open 3
B2 close 3
B2 upload
B2 open 4
B2 close 4
B2 open 5
B2 close 5
library(data.table)
setDT(dt)
dt[, index := .GRP, by = .(rev(cumsum(rev(operation) %in% c('close', 'checking'))))]
dt[, index := ifelse(cumsum(operation == 'open') > 0, index, NA), by = .(ID, index)]