我有一個數據框,它由第一列(experiment.id)組成,其餘列是與此實驗ID相關的值。每一行都是唯一的實驗ID。我的數據框的列數爲10 4 - 10 5。高效採樣數據幀避免循環
data.frame(experiment.id=1:100, v1=rnorm(100,1,2),v2=rnorm(100,-1,2))
該數據框是我的樣本空間的來源。我想要做的是爲每個獨特的實驗.id(行)隨機抽樣(與替換)與此id相關聯的值v1,v2,...,v10000中的一個,並構造一個樣本s1。在每個樣本s1中,代表所有實驗ID。
最終我想執行10 4個樣本,s1,s2,...,s 10 4並計算一些統計量。
什麼是最有效的方法(計算)來執行此採樣過程。我想盡可能避免循環。
更新: 我的問題不是全部關於採樣,而是存儲樣本。我想我真正的問題是,如果有比
d<-data.frame(experiment.id=1:1000, replicate (10000,rnorm(1000,100,2)))
results<-data.frame(d$experiment.id,replicate(n=10000,apply(d[,2:10001],1,function(x){sample(x,size=1,replace=T)})))
實驗。id是任何唯一的字符串/數 – ECII
'replicate'和'apply'本質上是循環和緩慢的。如果您有能力存儲這樣的矩陣,那麼到目前爲止發佈的任何答案都會更快。如果空間確實成爲問題,那麼您需要遍歷行並在您離開時從中獲取統計數據。所以,提前瞭解這一部分。到目前爲止,你已經暗示你需要1e9的值。這正在進入一個多千兆字節的矩陣。 – John
@John感謝您的輸入。正如你所提到的,我的主要問題是計算時間和存儲量,而不是抽樣程序本身。 「即時」計算統計數據可以提供一個選項,但事先提供完整的數據集並進行事後分析會很方便。感謝您的輸入。 – ECII