2

我有一个关于 R 的简单问题。

假设我有一个数组 x,它的长度是整数 h 的倍数。我想构造一个长度为length(x)/h的新数组,其元素是前h个元素的总和,然后是下一个h元素的总和,等等。

我可以使用糟糕的 C 相关编码来做到这一点,但我想看看用 R 做到这一点的最有效方法。

谢谢你的帮助。

4

2 回答 2

3

说你的价值观是

x = 1:100
h = 10

您可以通过创建一个包含 h 行的矩阵并获取列总和来做到这一点:

colSums(matrix(x, nrow=h))
# [1]  55 155 255 355 455 555 655 755 855 955

这是有效的,因为矩阵按列填充值:

matrix(x, nrow=h)
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1   11   21   31   41   51   61   71   81    91
 [2,]    2   12   22   32   42   52   62   72   82    92
 [3,]    3   13   23   33   43   53   63   73   83    93
 [4,]    4   14   24   34   44   54   64   74   84    94
 [5,]    5   15   25   35   45   55   65   75   85    95
 [6,]    6   16   26   36   46   56   66   76   86    96
 [7,]    7   17   27   37   47   57   67   77   87    97
 [8,]    8   18   28   38   48   58   68   78   88    98
 [9,]    9   19   29   39   49   59   69   79   89    99
[10,]   10   20   30   40   50   60   70   80   90   100
于 2013-10-10T07:07:53.987 回答
0

或者艰难的道路,

y <- unlist(sapply(0:((length(x)/h)-1) , function(k) sum(x[((k)*h + 1):((k+1)*h)] ) ) )
于 2013-10-10T11:30:40.483 回答