r - 如何将数据框拆分为多个数据框,每两列作为一个新数据框?

标签 r

我有以下包含 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/

相关文章:

R - for(x in x) 有效吗?

r - 在封闭件内使用 magrittr 管

r - 在 R 中识别变量随时间的变化

r - 线性 SVM 和提取权重

python - R 用户的 Numpy?

r - 如何使用循环调用列名:

r - 使用 tidyeval 进行编程回归建模

r - 更改多个可选子字符串的顺序

r - 从list()遍历键/值对

r - 使用 R googleway 进行批量地理编码时出错