从几列Rstudio或Excel中创build一列

我试图find一个已经存在的问题在这个问题上,但我不能这样,所以我在这里问你:

概要:

我想从几列中创build一列。 列中的所有值都按照相同的顺序排列,并且列也应该堆叠在彼此之下。

说明和细节

下面是我的csv.file的样子。 但是,请注意,有> 400列,这就是为什么我不想手动在例如Excel中。 所有列都有24行。

X1 X2 X3 X4 X5 X6 ... X470 0 1 5 10 8 0 7 0 0 0 0 0 0 0 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

我想将所有的列“堆叠”在一个列中,正如我在摘要中所描述的那样:

信息:下面的符号“…”意味着来自该列的其余值。

 VALUE FROM COLUMN 0 X1 0 X1 2 X1 ... 1 X2 0 X2 3 X2 ... 5 X3 ... 10 X4 ... 8 X5 ... 0 X6 ... 7 X470 ... 

所以最后,而不是有486列,其中每个有24行。 我将有1列11664行。 如果起源栏被写在一侧的新栏中(如上所示),但这不是“有义务的”,那将会很好。

OBS! 请注意,我已经用这个df只是显示了我想要达到的目标,所以清楚和可以理解的命令会被赞赏,因为我会将它应用于我的df。

如果解决scheme在R或Excel中完成,则无关紧要! 只要做起来容易


我希望我的描述是清楚的,否则请让我知道,所以我可以尝试再次形容。

非常感谢您的build议和帮助。

亲切的问候,艾琳

以下是非常简单的,但需要加载我认为包含在基地的reshape2包。 如上所示, stack()给出类似的输出,但是反转列。

 library(reshape2) df <- data.frame("A" = 1:21, "B" = 21:41, "C" = 40:60) > df ABC 1 1 21 40 2 2 22 41 3 3 23 42 4 4 24 43 5 5 25 44 6 6 26 45 7 7 27 46 8 8 28 47 9 9 29 48 10 10 30 49 11 11 31 50 12 12 32 51 13 13 33 52 14 14 34 53 15 15 35 54 16 16 36 55 17 17 37 56 18 18 38 57 19 19 39 58 20 20 40 59 21 21 41 60 melt(df) > melt(df) No id variables; using all as measure variables variable value 1 A 1 2 A 2 3 A 3 4 A 4 5 A 5 6 A 6 7 A 7 8 A 8 9 A 9 10 A 10 11 A 11 12 A 12 13 A 13 14 A 14 15 A 15 16 A 16 17 A 17 18 A 18 19 A 19 20 A 20 21 A 21 22 B 21 23 B 22 24 B 23 25 B 24 26 B 25 27 B 26 28 B 27 29 B 28 30 B 29 31 B 30 32 B 31 33 B 32 34 B 33 35 B 34 36 B 35 37 B 36 38 B 37 39 B 38 40 B 39 41 B 40 42 B 41 43 C 40 44 C 41 45 C 42 46 C 43 47 C 44 48 C 45 49 C 46 50 C 47 51 C 48 52 C 49 53 C 50 54 C 51 55 C 52 56 C 53 57 C 54 58 C 55 59 C 56 60 C 57 61 C 58 62 C 59 63 C 60 

我们可以使用stack来获取一列中的值和下一列中的值。

 stack(df) 

或者使用unlist

 data.frame(VALUE=unlist(df), fromColumn= rep(names(df), each=nrow(df))) 

这是一个VBA用户定义的function来完成这项工作:

 Function ConcatCols(Colrange As Variant) As Variant Dim LongCol() As Variant, i As Long, j As Long, k As Long Dim NumCols As Long, NumRows As Long, NumRows2 As Long If TypeName(Colrange) = "Range" Then Colrange = Colrange.Value2 NumRows = UBound(Colrange) NumCols = UBound(Colrange, 2) NumRows2 = NumRows * NumCols ReDim LongCol(1 To NumRows2, 1 To 1) k = 1 For i = 1 To NumCols For j = 1 To NumRows LongCol(k, 1) = Colrange(j, i) k = k + 1 Next j Next i ConcatCols = LongCol End Function 

在VBA模块中input代码,然后在列RM(或任何您想要的位置)中input= ConcatCols(A1:RL24)作为数组函数(Ctrl-Shift-Enter)来查看整个连接的列,或者从VBA子调用将数据写入电子表格。