从多列中创建一列 Rstudio 或 Excel

Create one column out of several columns Rstudio or Excel

我试图找到关于这个问题的一个已经存在的问题,但我找不到,所以这就是为什么我在这里问你:

总结:

我想从多个专栏中创建一个专栏。列中的所有值都按照与它们相同的顺序放置,并且列应堆叠在彼此下方。

描述和详细信息

下面是我的 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

我想 "stack" 一栏中的所有栏,正如我在摘要中简短描述的那样:

信息:下面的符号“...”表示该列中的其余值。

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 行。如果原始列写在旁边的新列中会很好(如上所示)但这不是 "obligated".

天啊!请注意,我使用此 df 只是大致展示了我想要实现的目标,因此非常感谢清晰易懂的命令,因为我会将其应用于我的 df。

解决方案是用R还是Excel都没有关系!只要容易做就可以了


希望我的描述清楚,否则请告诉我,以便我重新描述。

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

亲切的问候,艾琳

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

stack(df)

或使用unlist

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

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

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 模块中输入代码,然后在 RM 列(或任何您想要的位置)中输入 =ConcatCols(A1:RL24) 作为数组函数 (Ctrl-Shift-Enter) 以查看整个串联列,或从 VBA 子调用以将数据写入电子表格。

以下非常简单,但需要加载我认为包含在 base 中的 reshape2 包。如上所述,stack() 提供类似的输出,但反转列。

library(reshape2)

df <- data.frame("A" = 1:21, "B" = 21:41, "C" = 40:60)

> df
    A  B  C
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