2017-06-14 24 views
0

我有一個data.table看起來像這樣如何挑選內類別topx行內間隔中的R

test <- data.table(variable=c(rep(1:5,100)),percent=abs(rnorm(500,0,1)),select=c(501:1000)) 

我想什麼做的是:每variable%>%創造500周%的時間間隔(如[ 0,0.05),[0.05,0.1),[0.1,0.15)),所以最後我會有20*5區間,然後在這些區間內挑選頂部(x)select

UPDATE

> test[,cut(percent,20),by="variable"] 
    variable    V1 
    1:  1 (0.726,0.841] 
    2:  1 (0.496,0.611] 
    3:  1 (0.266,0.381] 

cut不工作我想順便說一下,因爲我沒有得到期望的間隔

+2

你可以用'cut'創建間隔 – akrun

+0

我認爲'cut'使同樣大小(以人口計算)的時間間隔,而我想,在長度方面同樣大小的間隔。 – quant

+0

分多步執行。首先在每個組中創建一個分位數的因子,然後通過分位數與組之間的相互作用進行分組來進行選擇。可能對此有用的函數有:'cut','interaction','rank','order','quantile' – snaut

回答

0

這裏是我的解決方案。

breaks <- seq(0, 1, by=0.05) # this works better than length.out=20, because you 
          # avoid round errors 
test[,interval:=cut(percent,breaks=breaks),by="variable"] 
setkey(test,variable,percent) 
test2 <- test[,tail(.SD,20),by=.(variable,interval)] 
+1

沒有必要逐組。它應該在有或沒有組的情況下工作。鑑於此,它看起來像你可以做'test [,tail(.SD,20),by =。(variable,interval = cut(percent,breaks = breaks))]或類似的。 – Frank

相關問題