次のような 2 つのデータ フレームがあります。
>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
何度も (たとえば 100)要素をサンプリングしてdf.A
、毎回 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)
しかし、それはまた 2 遅いです。
コードを改善するためのアイデアはありますか? 確かに私は明らかな何かを見逃しています
ありがとう