R在数组中搜索元素及其索引

时间:2012-04-23 03:59:12

标签: r

我有一个包含2列的矩阵,如下所述:

TIME     PRICE    
10        45
11        89
13        89
15        12
16        09
17        34
19        89
20        90
23        21
26        09

在上面的矩阵中,我需要迭代TIME列添加5秒并访问与该行匹配的相应PRICE。 例如:我从10开始。我需要访问15(10 + 5),如果列中的数字是连续数据,我将能够容易地达到15,但事实并非如此。所以在15秒时间,我需要掌握相应的价格。这一直持续到整个数据集结束。我需要访问的下一个元素是20,以及它的相应价格。现在我再添加5秒,因此继续。如果元素不存在,则必须立即访问该元素以获得相应的价格。

3 个答案:

答案 0 :(得分:1)

如果您要提取的行是m[1,1]+5, m[1,1]+10, m[1,1]+15等,那么:

m <- cbind(TIME=c(10,11,13,15,16,17,19,20,23,26), 
           PRICE=c(45,89,89,12,9,34,89,90,21,9))

r <- range(m[,1]) # 10,26
r <- seq(r[1]+5, r[2], 5) # 15,20,25
r <- findInterval(r-1, m[,1])+1 # 4,8,10 (values 15,20,26)
m[r,2] # 12,90,9

findInterval找到等于或小于给定值的值的索引,因此我给它一个较小的值,然后将1加到索引中。

答案 1 :(得分:0)

将问题分成几部分......

获取值为15的行:

调用你的Matrix,比如DATA,和 [1]提取感兴趣的行:

DATA[DATA[,1] == 15, ]

然后抓住第二列。

[2]在第一列添加5(我很确定你可以这样做):

DATA[,1] = DATA[,1] + 5

这应该让你开始。剩下的似乎只是一些时髦的迭代,递增5,使用[1]得到你想要的价格每次,交换15为一些变量。

我把剩下的解决方案作为练习留给读者。有关R中循环的提示等等,请参阅下面的教程(我不希望它很快就会被删除,但可能需要保留本地副本。祝你好运:))

http://www.stat.berkeley.edu/users/vigre/undergrad/reports/VIGRERintro.pdf

答案 2 :(得分:0)

正如@Tommy在上面评论的那样,目前尚不清楚你究竟希望获得什么时间。对我来说,似乎你想得到序列10,15,20,25的PRICE,......如果是真的,你可以轻易地起诉mod(%%)函数:

TIME <- c(10,11,13,15,16,17,19,20,23,26) # Your times
PRICE <- c(45,89,89,12,9,34,89,90,21,9) # your prices

PRICE[TIME %% 5 == 0] # Get prices from times in sequence 10, 15, 20, ...