如何将数据表按一个列进行子集,而将另一个列的值最小化

时间:2013-11-20 12:32:03

标签: r data.table

假设我的进程依赖于两个带一个输出的输入。该过程已经在其他地方进行了数值模拟,再次运行这些模拟是不切实际的。

我已将数据存储在表格中。该表包含(除其他外)两个关键输入参数和结果输出参数(分别为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值和quant值,满足指定alpha和v的min(abs(quant-alpha))。该表还必须包含q的相关值以及包含的任何其他数据。这一行。

我相信对于这个问题应该有一个非常简单的解决方案,而且我只是太新手了解如何找到它!

1 个答案:

答案 0 :(得分:2)

你只是想这样做......

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)的行。