从多列中创建一列 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
我试图找到关于这个问题的一个已经存在的问题,但我找不到,所以这就是为什么我在这里问你:
总结:
我想从多个专栏中创建一个专栏。列中的所有值都按照与它们相同的顺序放置,并且列应堆叠在彼此下方。
描述和详细信息
下面是我的 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