r - 重新启动的组计数器(使用 R data.table)

标签 r data.table

<分区>

这与Create sequential counter that restarts on a condition within panel data groups有些相关和 data.table "key indices" or "group counter" , 但不完全相同。

# data table:
    x y i d
 1: A B 1 1
 2: A B 1 1
 3: A C 2 2
 4: A D 3 3
 5: B A 1 4
 6: B A 1 4 
 7: C A 1 4
 8: C A 1 4 
 9: C B 2 5
10: C C 3 6
11: C C 3 6
12: C D 4 7

使用 dt[, d:= .GRP, by = .(x,y)] 可以生成最后一列。然而,我正在寻找一个在每个 x 组中重新启动的计数器。请参阅列 i 以获得所需的结果。

最佳答案

您可以在按 x 分组的 y 列上使用 rleid 函数来实现这一点。 rleid 是一种计数器,每次发生变化时都会增加,否则保持不变

library(data.table)
tab <- fread("
x y i d
A B 1 1
A B 1 1
A C 2 2
A D 3 3
B A 1 4
B A 1 4 
C A 1 4
C A 1 4 
C B 2 5
C C 3 6
C C 3 6
C D 4 7")

dt <- tab[, .(x, y, i)]
dt[, d:= rleid(y), by = .(x)]
dt
#>     x y i d
#>  1: A B 1 1
#>  2: A B 1 1
#>  3: A C 2 2
#>  4: A D 3 3
#>  5: B A 1 1
#>  6: B A 1 1
#>  7: C A 1 1
#>  8: C A 1 1
#>  9: C B 2 2
#> 10: C C 3 3
#> 11: C C 3 3
#> 12: C D 4 4

reprex package 创建于 2018-06-03 (v0.2.0).

关于r - 重新启动的组计数器(使用 R data.table),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670755/

相关文章:

r - 将长字符串转换为 data.frame

r - 使用 dplyr 进行计数和分组

R生成稀疏矩阵

r - 如何在不增加内存消耗的情况下绑定(bind)data.table?

r - PCA FactoMineR 绘图数据

r - 带有 'by' 参数的 data.table 的奇怪行为?

r - 如何对不同行的值求和并汇总为一行 (R)

r - 如果某些行满足条件,则使用 R 中的数据表标记组中的所有行

data.table 中的行制表

用先前的值替换缺失的值