我承认我对R来说是全新的并且有一些初学者的问题;
我的问题如下: 我有一个很长的矩阵TEST,长度为5000,有2列(第1列=时间;第2列=物种的浓度)。
我想在随机模拟中使用正确的浓度值来计算倾向度。 我已经有了一个算法给了我模拟时间t_sim;我需要的是一行代码,它在t = t_sim时给出各自的浓度值;
另外:时间向量可能有一个很大的步长,因此t_sim必须四舍五入到一个更大的值才能调用相应的浓度值。
我知道这可能是一个非常简单的问题,但我真的没有看到R中的解决方案。
祝福,非常感谢, ·阿尔
答案 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。