【问题标题】:R - Counting elements in a vector within a certain range, as a sliding window?R - 在一定范围内计算向量中的元素,作为滑动窗口?
【发布时间】:2013-10-31 23:25:30
【问题描述】:

我正在使用 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 灵活,因为我将使用它进行多种分析。

【问题讨论】:

  • 只是一个想法,您可以尝试对元素进行排序(如果它们还没有?),创建一个初始化为特定大小(例如 5 个间隔)的数据结构,如果需要可以增长然后迭代列表一次计算元素?

标签: r vector count sliding-window


【解决方案1】:

这里有一些解决方案。

使用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 

使用 lattice 包中的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)

【讨论】:

    【解决方案2】:
    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多