R:根据第1列的值调用第2列的矩阵值

时间:2015-07-31 14:25:13

标签: r matrix indexing

我承认我对R来说是全新的并且有一些初学者的问题;

我的问题如下: 我有一个很长的矩阵TEST,长度为5000,有2列(第1列=时间;第2列=物种的浓度)。

我想在随机模拟中使用正确的浓度值来计算倾向度。 我已经有了一个算法给了我模拟时间t_sim;我需要的是一行代码,它在t = t_sim时给出各自的浓度值;

另外:时间向量可能有一个很大的步长,因此t_sim必须四舍五入到一个更大的值才能调用相应的浓度值。

我知道这可能是一个非常简单的问题,但我真的没有看到R中的解决方案。

祝福,非常感谢, ·阿尔

2 个答案:

答案 0 :(得分:0)

如果没有样本数据,这个答案在黑暗中就是一个镜头,但我认为这可能有用:

t_conc <- TEST[which.min(abs(t_sim-TEST[,1])),2]

其中TEST是OP中描述的具有两列的矩阵,输出t_conc是与矩阵中最接近的time的值对应的浓度输入值t_sim

答案 1 :(得分:0)

这是黑暗中的另一个镜头:

set.seed(1);
N <- 20; test <- matrix(c(sort(sample(100,N)),rnorm(N,0.5,0.2)),N,dimnames=list(NULL,c('time','concentration')));
test;
##       time concentration
##  [1,]    6    0.80235623
##  [2,]   16    0.57796865
##  [3,]   19    0.37575188
##  [4,]   20    0.05706002
##  [5,]   27    0.72498618
##  [6,]   32    0.49101328
##  [7,]   34    0.49676195
##  [8,]   37    0.68876724
##  [9,]   43    0.66424424
## [10,]   57    0.61878026
## [11,]   58    0.68379547
## [12,]   61    0.65642726
## [13,]   62    0.51491300
## [14,]   63    0.10212966
## [15,]   67    0.62396515
## [16,]   83    0.48877425
## [17,]   86    0.46884090
## [18,]   88    0.20584952
## [19,]   89    0.40436999
## [20,]   97    0.58358831
t_sim <- 39;
test[findInterval(t_sim,test[,'time']),'concentration'];
## concentration
##     0.6887672

请注意,如果time介于两个t_sim值之间,findInterval()会返回较小 time值的索引,如我的示例所示。如果你想要更大,你需要做更多的工作:

i <- findInterval(t_sim,test[,'time']);
if (test[i,'time'] != t_sim && i < nrow(test)) i <- i+1;
test[i,'concentration'];
## concentration
##     0.6642442

如果您想要最近的,请参阅R: find nearest index