gpt4 book ai didi

r - 有条件的事件计数器

转载 作者:行者123 更新时间:2023-12-02 08:12:33 26 4
gpt4 key购买 nike

下面是一个数据帧 df,它有 1 个变量 ID 和 500K 数据点,我需要用以下条件实现一个 事件计数器 .
1。当 ID == A
时增加 事件计数器2。虽然 ID == A 不应考虑前 3 个数据点作为计数器增量。
下面显示了具有预期输出的数据框 df

ID       Event Counter  
D 0
F 0
V 0
A 0
A 0
A 0
A 1
A 1
A 1
V 1
F 1
A 1
A 1
A 1
A 2
F 2
G 2
A 2
A 2
A 2
A 3
A 3

请注意:- 行号 1、2 和 3 不满足条件,因此 事件计数器 没有递增。尽管 ID ==A 在第 4,5 和 6 行中,事件计数器 不会递增(引用:条件 2)。行号 12,13 和 14 的情况相同。

发现类似的问题,每次遇到满足条件的数据点时计数器都会递增,但我的实现条件不同。

最佳答案

您可以将 zoo::rollsumrle 结合使用:

library(zoo)
x <- rollsumr(df$ID == "A", k=4, fill = NA)
df$new <- with(rle(!is.na(x) & x == 4), rep(cumsum(values), lengths))

本例中的 k = 4x == 4 意味着你需要 3 例 ID == "A" before你想增加。您可以根据需要更改此号码。

结果等于你想要的输出:

all.equal(df$Event_counter, df$new)
#[1] TRUE

rle 部分返回:

rle(!is.na(x) & x == 4)
#Run Length Encoding
# lengths: int [1:6] 6 3 5 1 5 2
# values : logi [1:6] FALSE TRUE FALSE TRUE FALSE TRUE

现在我们可以 a) 计算值的累积和,即 0-1-1-2 ... b) 使用 rep 我们将每个值重复相同的次数每个序列都很长,即 lengths

关于r - 有条件的事件计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160359/

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