gpt4 book ai didi

r - 计算 data.table 中的记录数并生成每组内的行号

转载 作者:行者123 更新时间:2023-12-03 05:49:55 25 4
gpt4 key购买 nike

我有以下数据表

set.seed(1)
DT <- data.table(VAL = sample(c(1, 2, 3), 10, replace = TRUE))
VAL
1: 1
2: 2
3: 2
4: 3
5: 1
6: 3
7: 3
8: 2
9: 2
10: 1

VAL中的每个数字内,我想要:

  1. 计算记录/行数
  2. 创建第一次、第二次、第三次出现等的行索引(计数器)。

最后我想要结果

    VAL COUNT IDX
1: 1 3 1
2: 2 4 1
3: 2 4 2
4: 3 3 1
5: 1 3 2
6: 3 3 2
7: 3 3 3
8: 2 4 3
9: 2 4 4
10: 1 3 3

其中“COUNT”是每个“VAL”的记录/行数,“IDX”是每个“VAL”内的行索引。

我尝试使用 .I 处理 whichlength:

 dt[, list(COUNT = length(VAL == VAL[.I]), 
IDX = which(which(VAL == VAL[.I]) == .I))]

但这不起作用,因为 .I 引用带有索引的向量,所以我猜必须使用 .I[]。虽然在 .I[] 内部,我再次面临问题,我没有行索引,但我确实知道(通过阅读 data.table FAQ 并关注此处的帖子)如果可能的话,应避免循环遍历行。

那么,data.table 方式是什么?

最佳答案

使用.N...

DT[ , `:=`( COUNT = .N , IDX = 1:.N ) , by = VAL ]
# VAL COUNT IDX
# 1: 1 3 1
# 2: 2 4 1
# 3: 2 4 2
# 4: 3 3 1
# 5: 1 3 2
# 6: 3 3 2
# 7: 3 3 3
# 8: 2 4 3
# 9: 2 4 4
#10: 1 3 3

.N 是每个组中的记录数,组由 "VAL" 定义。

关于r - 计算 data.table 中的记录数并生成每组内的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869145/

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