我們希望得到一個數組,看起來像這樣:重複重複序列
1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4
什麼是做到這一點的最簡單的方法?
我們希望得到一個數組,看起來像這樣:重複重複序列
1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4
什麼是做到這一點的最簡單的方法?
您可以用單一rep
調用做到這一點。首先完成each
和times
參數,然後依次評估each
。
rep(1:4, times=3, each=3)
#[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4
這在我看來應該是被接受的答案 – Andrie
像這樣:
rep(sapply(1:4, function(x) {rep(x, 3)}), 3)
代表(X,N)返回重複X N次的矢量。 sapply將給定的函數分別應用於矢量1:4的每個元素,每個元素連續重複3次。
你應該看看Dieter的答案 - 'each'參數會比你使用sapply調用做的更好。 – Dason
或者,簡單(假設你的意思是一個矢量,而不是一個數組)
rep(rep(1:4,each=3),3)
這是一個使用數組操作的方法aperm
。這個想法是構造一個包含值的數組。使用aperm
重新排列它們以匹配所需的輸出,然後用c
「展開」該陣列。
c(aperm(array(1:4, dim=c(4,3,3)), c(2, 1, 3)))
[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4
它想到了一個for循環,但不是有一個更簡單的方法嗎? –