矢量化方式将数据集拆分为几何减少的子集

时间:2018-03-11 23:15:13

标签: r

对于我的实验,我需要计算赫斯特指数。部分原因是我需要通过重复减半总样本集来分割数据,直到子集中的元素数量低于某个阈值 - 通常为8或10。

例如:

1: 1 Set of N
2: 2 Sets of N/2
3: 4 Sets of N/4 
...

N/x创建长度小于阈值的子集后,此过程将停止。

通过while循环有一种明显的方法可以做到这一点。然而,这是丑陋和未经优化的。

是否有可用的功能或功能将数据矢量以这种方式分割成一组子集?还是我坚持用丑陋的未经优化的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

一种方法是计算要拆分的数据的行索引,然后使用lapply()中的那些索引来计算赫斯特指数。

N <- 100  # N must be nrow(data), value 100 indicates total rows in data
split_indices <- lapply( 1:8, function(x) { 
  unlist( ifelse(test = (x == 1), 
                 yes  = N, 
                 no   = list( c( 1, 
                                 cumsum( floor( rep( x = N/x, times = x-1) ) ),
                                 N ) ) ) ) 
  } )

split_indices
# [[1]]
# [1] 100
# 
# [[2]]
# [1]   1  50 100
# 
# [[3]]
# [1]   1  33  66 100
# 
# [[4]]
# [1]   1  25  50  75 100
# 
# [[5]]
# [1]   1  20  40  60  80 100
# 
# [[6]]
# [1]   1  16  32  48  64  80 100
# 
# [[7]]
# [1]   1  14  28  42  56  70  84 100
# 
# [[8]]
# [1]   1  12  24  36  48  60  72  84 100

现在在lapply()循环中使用hurst exponent函数。

lapply( split_indices, function( x ) --compute-hurst-exponent-- )