我有A1中的名稱列表:A144,我想將A49:A96移動到B1:B48和A97:144移至C1:C48。將單元格移動到每個第48行的新列
因此,對於每個第48行,我希望將下48行移動到新列。
如何做到這一點?
我有A1中的名稱列表:A144,我想將A49:A96移動到B1:B48和A97:144移至C1:C48。將單元格移動到每個第48行的新列
因此,對於每個第48行,我希望將下48行移動到新列。
如何做到這一點?
不確定此解決方案的可擴展性如何,但確實有效。
首先讓我們假設你的名字是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]
}
我認爲你必須詳細說明你的問題多一點。你是否有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))
如果您要考慮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
+1好的答案。 VBA在這裏看起來很簡單。 – Santosh
正如有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
我想使用R,其對後來相關分析,但任何作品! :) – user2862862
@ user2862862:好吧,你有幾個工作解決方案(R和VBA)。您可以考慮將其中一個標記爲正確的答案。 – adibender