2013-11-02 86 views

回答

0

不確定此解決方案的可擴展性如何,但確實有效。

首先讓我們假設你的名字是x和你想要的解決方案是在new.df

number.shifts <- ceiling(length(x)/48) # work out how many columns we need 

# create an empty (NA) data frame with the dimensions we need 
new.df <- matrix(data = NA, nrow = length(x), ncol = number.shifts) 

# run a for-loop over the x, shift the column over every 48th row 
j <- 1 
for (i in 1:length(x)){ 
    if (i %% 48 == 0) {j <- j + 1} 
    new.df[i,j] <- x[i] 
} 
0

我認爲你必須詳細說明你的問題多一點。你是否有R或Excel中的數據,並且你希望輸出是R還是Excel?

也就是說beeing說,如果x是您的指示簇

x <- rep(1:3, each = 48) 

y向量是包含任何要分佈在A柱名或變量:C(每一個具有48行),

y <- sample(letters, 3 * 48, replace = TRUE) 

,你可以這樣做:

y.wide <- do.call(cbind, split(y, x)) 
+0

我想使用R,其對後來相關分析,但任何作品! :) – user2862862

+0

@ user2862862:好吧,你有幾個工作解決方案(R和VBA)。您可以考慮將其中一個標記爲正確的答案。 – adibender

2

如果您要考慮VBA替代,則:

Sub MoveData() 
    nF = 1 
    nL = 48 
    nSize = Cells(Rows.Count, "A").End(xlUp).Row 
    nBlock = nSize/nL 
    For k = 1 To nBlock 
     nF = nF + 48 
     nL = nL + 48 
     Range("A" & nF & ":A" & nL).Copy Cells(1, k + 1) 
     Range("A" & nF & ":A" & nL).ClearContents 
    Next k 
End Sub 
+0

+1好的答案。 VBA在這裏看起來很簡單。 – Santosh

0

正如有stack R中創建一組列的很長表示,有unstack需要很長的列,使之成爲一個廣泛的形式。

這裏有一個基本的例子:

mydf <- data.frame(A = 1:144) 
mydf$groups <- paste0("A", gl(n=3, k=48)) ## One of many ways to create groups 
mydf2 <- unstack(mydf) 
head(mydf2) 
# A1 A2 A3 
# 1 1 49 97 
# 2 2 50 98 
# 3 3 51 99 
# 4 4 52 100 
# 5 5 53 101 
# 6 6 54 102 
tail(mydf2) 
# A1 A2 A3 
# 43 43 91 139 
# 44 44 92 140 
# 45 45 93 141 
# 46 46 94 142 
# 47 47 95 143 
# 48 48 96 144 
相關問題