【发布时间】:2026-02-16 14:30:01
【问题描述】:
我有两个数据表 dt_main 和 dt_unit。
set.seed(1)
dt_main<-data.table(ID=sample(1:20,size=10),Group=sample(1:3,size=10,replace=TRUE),Unit=0)
dt_unit<-data.table(Group=sample(1:3,size=10,replace=TRUE),Unit_id=sample(1000:3000,size=10,replace=TRUE))
dt_main 看起来像这样:
> dt_main
ID Group Unit
1: 4 1 0
2: 7 1 0
3: 1 1 0
4: 2 2 0
5: 13 2 0
6: 19 2 0
7: 11 2 0
8: 17 3 0
9: 14 1 0
10: 3 3 0
dt_unit 看起来像这样:
> dt_unit
Group Unit_id
1: 1 2624
2: 1 2963
3: 1 1974
4: 1 1800
5: 2 1851
6: 1 1930
7: 1 1325
8: 2 1329
9: 2 1553
10: 2 2445
我想填写dt_main 中的Unit 列,方法是从dt_unit 到dt_main 中抽取一个Unit_id 与相同的Group。
例如对于dt_main 中的第一行(所以Group=1),代码应查找dt_unit 并找到Group 为1 的行(见下文),然后选择@987654338 @ 并将其插入Unit。
> dt_unit[Group==1]
Group Unit_id
1: 1 2624
2: 1 2963
3: 1 1974
4: 1 1800
5: 1 1930
6: 1 1325
我尝试了这样的方法,它为每一行分配了相同的数字:
dt_main[,Unit:=sample(dt_unit[Group==Group]$Unit_id,size=1)]
我也尝试过sapply,但效果不佳。
【问题讨论】:
-
对于
Group的所有值,您想要相同的Unit_id吗?所以Group = 1与dt_unit的值相同? -
不,我每次都想要随机值。