我有以下包含 10 列的数据框。
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
我想将该数据帧拆分为不同的 block ,将其两列中的每两列作为一个新数据帧。例如,V1 & V2 合并为一个数据帧,V3 & V4 合并为一个数据帧等等:
V1 V2
1 2
11 12
21 22
31 32
41 42
51 52
61 62
71 72
81 82
91 92
V3 V4
3 4
13 14
23 24
33 34
43 44
53 54
63 64
73 74
83 84
93 94
我如何在 R 中轻松实现这一目标?
最佳答案
尝试使用 INDEX
参数 1、1、2、2 等来tapply
。
tapply(as.list(DF), gl(ncol(DF)/2, 2), as.data.frame)
给予(在输出下面继续):
$`1`
V1 V2
1 1 2
2 11 12
3 21 22
4 31 32
5 41 42
6 51 52
7 61 62
8 71 72
9 81 82
10 91 92
$`2`
V3 V4
1 3 4
2 13 14
3 23 24
4 33 34
5 43 44
6 53 54
7 63 64
8 73 74
9 83 84
10 93 94
$`3`
V5 V6
1 5 6
2 15 16
3 25 26
4 35 36
5 45 46
6 55 56
7 65 66
8 75 76
9 85 86
10 95 96
$`4`
V7 V8
1 7 8
2 17 18
3 27 28
4 37 38
5 47 48
6 57 58
7 67 68
8 77 78
9 87 88
10 97 98
如果问题中存在全数字数据框,另一种可能性是将其 reshape 为数组:
a <- array(unlist(DF), c(nrow(DF), 2, ncol(DF)/2))
在这种情况下,a[,,i]
是 i = 1, ..., ncol(DF)/2 的第 i 个矩阵。
注意:可重现形式的输入DF
是:
DF <- as.data.frame(matrix(1:100, 10, byrow = TRUE))
关于r - 如何将数据框拆分为多个数据框,每两列作为一个新数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35747729/