R - 在一定范围内的向量中计算元素,作为滑动窗口?

时间:2013-10-22 21:42:47

标签: r vector count sliding-window

我正在使用R,我希望将整数的标准向量转换为2列数据框,显示每个向量中属于指定大小窗口的元素数。

例如,使用此向量:

    1, 75, 79, 90, 91, 92, 109, 120, 167, 198, 203, 204, 206, 224, 230, 
    236, 240, 245, 263, 344

查看窗口大小为50的值的结果应如下所示:

50  1
100 5
150 2
200 2
250 8
300 1
350 1
400 0

第一列为数字范围,第二列为该范围内的计数。

这表明,对于1-50的范围,在该范围内有1个元素,对于51-100有5个元素,对于101-150有2个元素,等等。然而,关键是窗口-size是灵活的,因为我将它用于多种分析。

2 个答案:

答案 0 :(得分:2)

这里有一些解决方案。

使用cuttable

table(cut(vv,seq(min(vv),max(vv),50),include.lowest = TRUE))
   [1,51]  (51,101] (101,151] (151,201] (201,251] (251,301] 
        1         5         2         2         8         1 

使用findInterval

table(findInterval(vv,seq(min(vv),max(vv),50)))

1 2 3 4 5 6 7 
1 5 2 2 8 1 1 

使用格子包中的shingle

shingle(vv,cbind(seq(min(vv),max(vv),50) ,seq(50,max(vv)+50,50)))

Intervals:
  min max count
1   1  50     1
2  51 100     5
3 101 150     2
4 151 200     2
5 201 250     8
6 251 300     1
7 301 350     1

where `vv`:

    c(1, 75, 79, 90, 91, 92, 109, 120, 167, 198, 203, 204, 206, 224, 
    230, 236, 240, 245, 263, 344)

答案 1 :(得分:1)

table((as.integer(d/50)+1) * 50)

或使用整数除法

table((d%/%50+1) * 50)

输出:

 50 100 150 200 250 300 350 
  1   5   2   2   8   1   1