【发布时间】:2023-03-13 17:18:02
【问题描述】:
在 C3 列的 data.table 中,我想按每个组 (C1) 标记 N 个随机选择的行。在 SO here、here 和 here 上已经提出了几个类似的问题。但是根据答案仍然无法弄清楚如何为我的任务找到解决方案。
set.seed(1)
dt = data.table(C1 = c("A","A","A","B","C","C","C","D","D","D"),
C2 = c(2,1,3,1,2,3,4,5,4,5))
dt
C1 C2
1: A 2
2: A 1
3: A 3
4: B 1
5: C 2
6: C 3
7: C 4
8: D 5
9: D 4
10: D 5
这里是每个 C1 组随机选择的两个行的行索引(不适用于 B 组):
dt[, sample(.I, min(.N, 2)), by = C1]$V1
[1] 1 3 3 7 5 10 9
注意:B 组只应选择一行,因为 B 组仅包含一行。
这里是每个组中一个随机选择的行的解决方案,这通常不适用于 B 组:
dt[, C3 := .I == sample(.I, 1), by = C1]
dt
C1 C2 C3
1: A 2 FALSE
2: A 1 TRUE
3: A 3 FALSE
4: B 1 FALSE
5: C 2 TRUE
6: C 3 FALSE
7: C 4 FALSE
8: D 5 TRUE
9: D 4 FALSE
10: D 5 FALSE
实际上我想将它扩展为 N 行。我试过(两行):
dt[, C3 := .I==sample(.I, min(.N, 2)), by = C1]
这当然行不通。
非常感谢任何帮助!
【问题讨论】:
标签: r data.table