gpt4 book ai didi

R 数据表 - 使用当前行之前的所有行计算每一行

转载 作者:行者123 更新时间:2023-12-04 01:41:47 27 4
gpt4 key购买 nike

我希望按 id 和按顺序(时间)计算不同的东西。
例如,与:

dt = data.table( id=c(1,1,1,2,2,2,3,3,3), hour=c(1,5,5,6,7,8,23,23,23), ip=c(1,1,45,2,2,2,3,1,1), target=c(1,0,0,1,1,1,1,1,0), day=c(1,1,1,1,1,1,3,2,1))

id hour ip target day
1: 1 1 1 1 1
2: 1 5 1 0 1
3: 1 5 45 0 1
4: 2 6 2 1 1
5: 2 7 2 1 1
6: 2 8 2 1 1
7: 3 23 3 1 3
8: 3 23 1 1 2
9: 3 23 1 0 1

我希望为每个 id 计算到目前为止每行的事件天数和事件小时数。
这意味着我希望获得以下输出:
   id hour ip target day  nb_active_hours_so_far
1: 1 1 1 1 1 0 (first occurence of id when ordered by hour)
2: 1 5 1 0 1 1 (has been active in hour "1")
3: 1 5 45 0 1 2 (has been active in hour "1" and "5")
4: 2 6 2 1 1 0 (first occurence)
5: 2 7 2 1 1 1 (has been active in hour "6")
6: 2 8 2 1 1 2 (has been active in hour "6" and "7")
7: 3 23 3 1 3 0 (first occurence)
8: 3 23 1 1 2 1 (has been active in hour "23")
9: 3 23 1 0 1 1 (has been active in hour "23" only)

要获得事件时间的总数,我会这样做:
dt[, nb_active_hours := length(unique(hour)), by=id]

但我也想拥有到目前为止的部分。我不知道如何去做...
任何帮助,将不胜感激。

最佳答案

这似乎有效(尽管尚未在不同情况下进行测试)

dt[, nb_active_hours_so_far := cumsum(c(0:1, diff(hour[-.N]))>0), by = id]
# id hour ip target day temp nb_active_hours_so_far
# 1: 1 1 1 1 1 0 0
# 2: 1 5 1 0 1 1 1
# 3: 1 5 45 0 1 1 2
# 4: 2 6 2 1 1 0 0
# 5: 2 7 2 1 1 1 1
# 6: 2 8 2 1 1 2 2
# 7: 3 23 3 1 3 0 0
# 8: 3 23 1 1 2 0 1
# 9: 3 23 1 0 1 0 1

关于R 数据表 - 使用当前行之前的所有行计算每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31113330/

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