我正在尝试使用data.table加速对相对较大的数据集进行一些计算。下面的例子复制了这种情况:
DT = data.table(a=sample(1:2), b=sample(1:1000,20))
> DT
a b
1: 2 440
2: 1 5
3: 2 795
4: 1 138
5: 2 941
6: 1 929
7: 2 759
8: 1 192
9: 2 994
10: 1 176
11: 2 152
12: 1 893
13: 2 28
14: 1 884
15: 2 467
16: 1 761
17: 2 879
18: 1 964
19: 2 802
20: 1 271
我想对不同数量的重复组a == 1和a == 2进行抽样,例如,n1 = 5和n2 = 3次重复,无需替换,并获得类似
的内容 a b
1: 2 440
2: 2 879
3: 2 994
4: 2 152
5: 2 879
6: 1 884
7: 1 964
8: 1 929
但我似乎无法使用data.table解决它,即我无法将不同的样本大小插入到data.table命令中。有什么办法吗?我是data.table和R的新手,所以任何建设性的指导都会非常值得赞赏
答案 0 :(得分:0)
一个选项是split
' b'列' a',传递'尺寸'作为Map
中的向量,并获得' b'的sample
使用相应的'尺寸'。输出为list
,可以将其转换为“数据框架”。使用stack
包含2列。
set.seed(24)
stack(Map(sample, split(DT$b, DT$a), size=c(5,3),MoreArgs=list(replace=FALSE)))
# values ind
#1 279 1
#2 93 1
#3 665 1
#4 797 1
#5 317 1
#6 542 2
#7 761 2
#8 893 2
或者使用data.table
方法,我们melt
list
我们使用Map
获得的输出。{/ p>
set.seed(24)
DT[, melt(Map(sample, split(b, a), size=c(5,3), MoreArgs=list(replace=FALSE)))]
# value L1
#1 279 1
#2 93 1
#3 665 1
#4 797 1
#5 317 1
#6 542 2
#7 761 2
#8 893 2