2010-11-30 63 views
10

有这样的数据:如何统计有多少元素以惯用的方式满足条件?

> data 
[1] 1290603356 1290603360 1290603350 1290603344 1290603340 1290603373 
[7] 1290603354 1290603359 1290603345 1290603363 1290603357 1290603354 
[13] 1290603364 1290603349 1290603352 1290603365 1290603349 1290603343 
[19] 1290603339 1290603343 
> offsets <- c(0, 0.5,1,2,4,8,24,4*24,7*24) * 3600) 
[1] 1800 3600 7200 14400 28800 86400 345600 604800 
> myoffsets <- min(data)+offsets 

之中,UNIX时代的列表和偏移量的列表(0.5小时,1H,2H,4H ...) 我希望能够绘制有多少的历元是< =比分钟(数据)+偏移量

在这个例子中这将是

1 20 20 20 20 20 20 20 

我已经发现如何与一个for循环做到这一点:

for(i in c(1:length(myoffsets))) myres$x[i] <- length(data[data <= myoffsets[i]]) 

但是我敢肯定,如果做到这一点并不复杂,那么还有更习惯的方式吗?

回答

5

建议1:稍微更惯用的方法是将取代

长度(数据[数据< = myoffsets [I]])

总和(数据< = myoffsets [i])

这样,您不会最终为myoffsets中的每个值取data的子集,只计算其长度并丢弃。

建议2:for中的c()是多余的。使用较少的按键时,以下操作完全相同:for(i in 1:length(myoffsets))

最后,如果你愿意摆脱明确的循环,这样的事情可能是你的味道:

迈尔斯$ X < - sapply(myoffsets,函数(O)和(数据< = o))

+0

这看起来不错。现在看起来好多了。感谢您帮助初学者! (数据)+ c(0,0.5,1,2,4,8,24,4 * 24,7),其中, * 24)* 3600)) df $ cnt < - sapply(df $ offset,function(o)sum(data <= o)) – user525602 2010-11-30 20:34:14

0
plot(subset(data, data <= min(data+offset)))