0

我有一个包含 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 秒,因此继续。如果元素不存在,则必须访问立即大于它的元素以获得相应的价格。

4

3 回答 3

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 添加到索引。

于 2012-04-23T04:35:29.433 回答
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, ...
于 2012-04-23T08:02:56.017 回答
0

将问题分解为子片段...

获取值为 15 的行:

调用您的矩阵,例如 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

于 2012-04-23T04:17:46.203 回答