我在A1:A144中有名字列表,我想将A49:A96移动到B1:B48和A97:144移动到C1:C48。
因此,对于每个第48行,我希望接下来的48行移动到新列。
怎么做?
答案 0 :(得分: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
答案 1 :(得分: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]
}
答案 2 :(得分:0)
我认为你必须再详细说明你的问题。你有R或Excel中的数据,你想要输出在R或Excel吗?
如果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))
答案 3 :(得分:0)
就像在R中有stack
来创建一组列的非常长的表示一样,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