我想創建一個非常大(大約200萬行)的data.table
df
的隨機子集。 數據表有一個權重列wgt
,它表示每條線代表多少個觀察值。 爲了產生行數我想提取的矢量,我的步驟如下:sample()命令太慢R
我得到觀測的確切數目:
ns<- length(df$wgt)
我得到所需的行的數量(樣本的30% ):
lines<-round(0.3*ns)
我計算概率的矢量:
pr<-df$wgt/sum(df$wgt)
然後我計算行號的矢量,以獲得子樣本:
ssout<-sample(1:ns, size=lines, probs=pr)
最終目標是使用df[ssout,]
到子集的數據。然而,R在計算ssout
時卡住了。
有沒有更快/更有效的方法來做到這一點?
謝謝!
如果指定了所有的參數,使用'sample.int'將會修剪一點點,這也會迫使你首先不*創建'1:ns'向量(就像跳過建議的@DavidArenburg '1:'部分) –
根據您的描述(「表示每條線代表多少個觀察值的wgt)來判斷,您應該使用替換進行採樣。如果一條線的重量爲百分之十,則應該可以多次繪製。 – Frank
我想這與data.table(它被標記)沒有任何關係。我不確定,但... – Frank