2013-10-10 57 views
2

我有一個簡單的問題R.在R的陣列操作

假設我有一個數組x的長度是整數h的倍數。我想構造一個長度爲(x)/ h的新數組,其元素是第一個h元素的總和,然後是下一個h元素的和,等等。

我可以使用bad C相關的編碼,但我希望看到用R做最有效的方法。

感謝您的幫助。

回答

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 
+0

只是一面不適合未來的讀者,矩陣可以告訴按行填寫值。 –

0

或硬盤的方式,

y <- unlist(sapply(0:((length(x)/h)-1) , function(k) sum(x[((k)*h + 1):((k+1)*h)])))