gpt4 book ai didi

r - 计算R中每组连续连续值的长度

转载 作者:行者123 更新时间:2023-12-03 18:43:04 25 4
gpt4 key购买 nike

我有一个带有连续值的数据集,我想知道每个长度出现的次数。
更具体地说,我想找出有多少 id 的序列从 1:2、1:3、1:4 等开始。
只有从 1 开始的序列才有意义。
在这个例子中,id1 有一个从 1:3 开始运行的“完整”序列(因为数字 4 缺失),id2 有一个从 1:5 开始运行的序列,id3 有一个从 1:6 开始运行的序列,id4 没有被计算在内因为它不是以 1 的值开始,并且 id 5 的序列从 1:3 开始。
所以我们最终得到两个序列直到 3,一个序列直到 5,一个序列直到 6。
有没有一种聪明的方法来计算这个,而不诉诸低效循环?
示例数据:

data <- data.table( id    = c(1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5),
value = c(1,2,3,5,1,2,3,4,5,10,11,1,2,3,4,5,6,2,3,4,5,6,7,8,1,2,3,7))

> data
id value
1: 1 1
2: 1 2
3: 1 3
4: 1 5
5: 2 1
6: 2 2
7: 2 3
8: 2 4
9: 2 5
10: 2 10
11: 2 11
12: 3 1
13: 3 2
14: 3 3
15: 3 4
16: 3 5
17: 3 6
18: 4 2
19: 4 3
20: 4 4
21: 4 5
22: 4 6
23: 4 7
24: 4 8
25: 5 1
26: 5 2
27: 5 3
28: 5 7
id value

最佳答案

out <- data[, len0 := rleid(c(TRUE, diff(value) == 1L)), by = .(id) ][
, .(value1 = first(value), len = .N), by = .(id, len0) ]
out
# id len0 value1 len
# <num> <int> <num> <int>
# 1: 1 1 1 3
# 2: 1 2 5 1
# 3: 2 1 1 5
# 4: 2 2 10 1
# 5: 2 3 11 1
# 6: 3 1 1 6
# 7: 4 1 2 7
# 8: 5 1 1 3
# 9: 5 2 7 1
演练:
  • 每个内id , len0被创建以识别增加 1 步
  • id , len0 ,总结第一个值(如果你只想要那些从 1 开始的值,见下文)和 len第一次运行

  • 如果您只想知道序列以 1 开始的那些,请过滤 value1 :
    out[ value1 == 1L, ]
    # id len0 value1 len
    # <num> <int> <num> <int>
    # 1: 1 1 1 3
    # 2: 2 1 1 5
    # 3: 3 1 1 6
    # 4: 5 1 1 3
    (我认为此时您只需要 idlen。)

    关于r - 计算R中每组连续连续值的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66047717/

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