簡體   English   中英

如何按一列將數據表子集化,而另一列則最小值

[英]How to subset a data table by one column with minimal value in another

假設我有一個過程取決於兩個輸入和一個輸出。 該過程已經在其他地方進行了數值模擬,因此再次運行這些模擬是不切實際的。

我已經將數據存儲在一個表中。 該表(除其他事項外)包含兩個關鍵輸入參數和結果輸出參數(此處分別為v,q和quant)。

> v=0.01*rep(1:100, each=100)
> q=0.01*rep(seq(1:100),100)
> quant <- rnorm(10000, mean=0.5, sd=0.1)
> fd <- data.table(q,v, quant)

我的問題:輸入參數空間由輸入之一(此處為v)的離散值細分,我想知道如何提取表的一個子集,其中第二個輸入(q)的值產生一些極值在另一個輸入的子集中保持不變的輸出(例如,最接近特定值的alpha,以便我們尋求min(abs(quant-alpha)))。 例如,假設alpha = 0.5

fd1 <- subset(fd,???min(abs(quant-0.5)),by=v)

因此,結果表將具有v的唯一值和滿足指定alpha和v的min(abs(quant-alpha))的quant值。該表還必須包含q的相關值以及該行中包含的任何其他數據。

我認為應該為這個問題提供一個非常簡單的解決方案,而且我只是個新手,不知道如何找到它!

您是否只是想這樣做...

fd[  , .SD[ which.min( abs(quant-0.5) ) ] , by = v ]
#        v    q     quant
#  1: 0.01 0.42 0.5010319
#  2: 0.02 0.71 0.4983129
#  3: 0.03 0.47 0.4996793
#  4: 0.04 0.01 0.5028813
#  5: 0.05 0.93 0.5009666
#  6: 0.06 0.93 0.4996367

您將獲得每個組的行( by = v ),該行滿足使用which.min子集.SD的條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM