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