gpt4 book ai didi

r - 按变量对行进行编号,但在满足条件时重新开始

转载 作者:行者123 更新时间:2023-12-02 05:16:06 25 4
gpt4 key购买 nike

我想对数据框中的某些行组合进行编号(按 ID 和时间排序)

tc <- textConnection('
id time end_yn
abc 10 0
abc 11 0
abc 12 1
abc 13 0
def 10 0
def 15 1
def 16 0
def 17 0
def 18 1
')

test <- read.table(tc, header=TRUE)

目标是创建一个新列(“number”),将每个 id 的每一行从 1 到 n 编号,直到 end_yn == 1 被命中。在end_yn == 1之后,编号应该重新开始。

在不考虑 end_yn == 1 条件的情况下,可以使用以下方式对行进行编号:

DT <- data.table(test)
DT[, id := seq_len(.N), by = id]

但是预期结果应该是:

id              time       end_yn   number
abc 10 0 1
abc 11 0 2
abc 12 1 3
abc 13 0 1
def 10 0 1
def 15 1 2
def 16 0 1
def 17 0 2
def 18 1 3

如何合并end_yn == 1条件?

最佳答案

我猜有不同的方法可以做到这一点,但这里有一个:

DT[, cEnd := c(0,cumsum(end_yn)[-.N])] # carry the end value forward

DT[, number := seq_len(.N), by = "id,cEnd"] # create your sequence

DT[, cEnd := NULL] # remove the column created above

id 设置为 DT 的键可能值得。

关于r - 按变量对行进行编号,但在满足条件时重新开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12969819/

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