我有两个看起来像这样的数据框:
>df.A
NAME pvalues index
A 0.9 1
B 0.8 2
C 0.7 3
D 0.6 4
E 0.5 5
F 0.4 6
G 0.3 7
H 0.2 8
I 0.1 9
>df.B
NAME VALUE index
B 100 1
G 99 2
H 98 3
C 97 4
D 96 5
F 95 6
A 94 7
I 93 8
E 92 9
我想从df.A
多次(例如 100 次)中采样元素,每次选择 4 个元素,然后查看df.B
与这些新 data.frames 匹配的索引,最后对这些新 data.frames 的索引求和。
我的方法如下;
res = list(data.frame())
for (i in 1:100){
res[[i]] = as.data.frame(sample(df.A$NAME, 4))
names(res[[i]]) <- 'NAME'
}
func <- function(x,y){merge(x, y, by.x=names(x)[1], by.y=names(y)[1])}
rand <- lapply(res, func, df.B)
sum.random = sapply(rand, function(x) sum(x$index))
两者data.frames
都是我的真实数据(13000 行和 4 列)的摘要,因此,处理速度很重要。我目前的方法需要很长时间,我认为是因为merge
步骤。
我也试过data.table
dt = data.table(df.B, key='NAME')
fn = function(x){dt[x]};
rand2 = lapply(res, func)
但是也慢了两个,
有什么改进代码的想法吗?当然我错过了一些明显的东西
谢谢