gpt4 book ai didi

r - 如何为其他列中的一组值创建索引列

转载 作者:行者123 更新时间:2023-12-03 21:44:05 25 4
gpt4 key购买 nike

我有一个数据框:

ID      operation
A1 open
A1 open
A1 close
A1
A1 open
A1 close
B2
B2 open
B2 open
B2 open
B2 close
B2 upload
B2 open
B2 close
B2 open
B2 close
我想在列操作中为每个“打开”和“关闭”包添加索引。所以对于 open 和 close 之间的每一行都必须具有相同的索引。所以想要的结果是:
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
我怎么能那样做?哪些功能可用于这些以及如何应用它?最好使用 data.table

最佳答案

这是在 data.table 中执行此操作的方法:

dt[, index := .GRP, by = .(rev(cumsum(rev(operation) == 'close')))]
dt[, index := ifelse(cumsum(operation == 'open') > 0, index, NA), by = .(ID, index)]
dt
# ID operation index
# 1: A1 open 1
# 2: A1 open 1
# 3: A1 close 1
# 4: A1 NA
# 5: A1 open 2
# 6: A1 close 2
# 7: B2 NA
# 8: B2 open 3
# 9: B2 open 3
# 10: B2 open 3
# 11: B2 close 3
# 12: B2 upload NA
# 13: B2 open 4
# 14: B2 close 4
# 15: B2 open 5
# 16: B2 close 5
由于 cumsum的两条路径, 如果操作不在 c('open', 'close') 中, 它会:
  • 如果它在 open 之间,则获得正确的索引和 close ;
  • 获取 NA如果在 close 之间和 open .
  • 关于r - 如何为其他列中的一组值创建索引列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65734717/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com