如何计算有多少元素以惯用的方式满足条件?

时间:2010-11-30 19:05:21

标签: r

拥有这些数据:

> 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小时,1小时,2小时,4小时......) 我希望能够绘制多少个时期的数据&lt; =而不是min(数据)+偏移量

在这个例子中它将是

1 20 20 20 20 20 20 20

我已经找到了如何使用for循环执行此操作:

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

但是我确信如果这样做不是那么复杂会有更惯用的方法吗?

2 个答案:

答案 0 :(得分:5)

建议1:稍微更惯用的方式是替换

  

length(data [data&lt; = myoffsets [i]])

  

sum(data&lt; = myoffsets [i])

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

建议2: c()中的for是多余的。以下操作将完全相同,只需更少的击键次数:for(i in 1:length(myoffsets))

最后,如果你想摆脱显式循环,这样的话可能符合你的口味:

  

myres $ x&lt; - sapply(myoffsets,function(o)sum(data&lt; = o))

答案 1 :(得分:0)

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