首页 > 解决方案 > 使用向量列表作为列索引按列拆分数据帧

问题描述

我有一个数据框V

> V
          1        2        3        4        5        6        7        8        9       10
1  2.912543 2.570664 3.341646 3.225278 3.131639 3.052497 3.117737 3.429533 3.392248 2.847380
2  2.891564 2.698348 3.035995 2.898063 2.808887 2.850897 3.217016 2.826621 3.229053 2.698508
3  3.214684 2.644645 3.160234 2.923109 3.230461 2.961171 3.129343 3.024775 2.714332 3.324411
4  2.919603 3.023168 3.070867 2.994575 2.947305 2.964142 3.278173 3.131523 2.788786 3.239060
5  2.792197 3.316468 2.915747 3.155218 3.315128 2.759656 2.630333 3.232530 2.920433 3.016210
6  2.902794 3.294973 3.229803 3.351397 3.269347 2.609505 3.035035 2.919629 2.919356 2.649507
7  3.049518 3.107500 2.857238 3.331793 3.322184 2.904852 3.335267 3.215756 3.079802 3.102080
8  3.083056 3.281189 3.070641 2.848449 2.961288 2.683630 3.153762 3.119757 3.103300 3.189348
9  2.775359 3.057107 3.217315 3.388652 2.984062 3.395337 2.896535 3.284888 2.589920 2.882975
10 2.540940 2.844450 3.332348 2.767093 2.962410 2.957737 2.929318 3.080653 3.103251 3.315891

和一个向量列表ind。向量的组合长度等于数据框中的列数。

> ind 
[[1]]
[1] 1 2 3

[[2]]
[1] 4 5 6 7 8

[[3]]
[1]  9 10

如何V使用列表中的向量作为列索引将数据帧逐列拆分为多个数据帧,ind 以选择子数据帧并将它们输出到列表中。因此输出应如下所示:

[[1]]
          1        2        3
1  2.912543 2.570664 3.341646
2  2.891564 2.698348 3.035995
3  3.214684 2.644645 3.160234
4  2.919603 3.023168 3.070867
5  2.792197 3.316468 2.915747
6  2.902794 3.294973 3.229803
7  3.049518 3.107500 2.857238
8  3.083056 3.281189 3.070641
9  2.775359 3.057107 3.217315
10 2.540940 2.844450 3.332348

[[2]]
          4        5        6        7        8
1  3.225278 3.131639 3.052497 3.117737 3.429533
2  2.898063 2.808887 2.850897 3.217016 2.826621
3  2.923109 3.230461 2.961171 3.129343 3.024775
4  2.994575 2.947305 2.964142 3.278173 3.131523
5  3.155218 3.315128 2.759656 2.630333 3.232530
6  3.351397 3.269347 2.609505 3.035035 2.919629
7  3.331793 3.322184 2.904852 3.335267 3.215756
8  2.848449 2.961288 2.683630 3.153762 3.119757
9  3.388652 2.984062 3.395337 2.896535 3.284888
10 2.767093 2.962410 2.957737 2.929318 3.080653

[[3]]
          9       10
1  3.392248 2.847380
2  3.229053 2.698508
3  2.714332 3.324411
4  2.788786 3.239060
5  2.920433 3.016210
6  2.919356 2.649507
7  3.079802 3.102080
8  3.103300 3.189348
9  2.589920 2.882975
10 3.103251 3.315891

标签: r

解决方案


很简单

> lapply(ind, function(x) V[,x])

[[1]]
         X1       X2       X3
1  2.912543 2.570664 3.341646
2  2.891564 2.698348 3.035995
3  3.214684 2.644645 3.160234
4  2.919603 3.023168 3.070867
5  2.792197 3.316468 2.915747
6  2.902794 3.294973 3.229803
7  3.049518 3.107500 2.857238
8  3.083056 3.281189 3.070641
9  2.775359 3.057107 3.217315
10 2.540940 2.844450 3.332348

[[2]]
         X4       X5       X6       X7       X8
1  3.225278 3.131639 3.052497 3.117737 3.429533
2  2.898063 2.808887 2.850897 3.217016 2.826621
3  2.923109 3.230461 2.961171 3.129343 3.024775
4  2.994575 2.947305 2.964142 3.278173 3.131523
5  3.155218 3.315128 2.759656 2.630333 3.232530
6  3.351397 3.269347 2.609505 3.035035 2.919629
7  3.331793 3.322184 2.904852 3.335267 3.215756
8  2.848449 2.961288 2.683630 3.153762 3.119757
9  3.388652 2.984062 3.395337 2.896535 3.284888
10 2.767093 2.962410 2.957737 2.929318 3.080653

[[3]]
         X9      X10
1  3.392248 2.847380
2  3.229053 2.698508
3  2.714332 3.324411
4  2.788786 3.239060
5  2.920433 3.016210
6  2.919356 2.649507
7  3.079802 3.102080
8  3.103300 3.189348
9  2.589920 2.882975
10 3.103251 3.315891

推荐阅读