首页 > 解决方案 > 如何实现提取/分离功能(来自 dplyr 和 tidyr)以将一列分成多列。基于任意值?

问题描述

我有一个专栏:

Y = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)

我想根据列值的位置拆分为多个列。例如,我想:

Y1=c(1,2,3,4,5)
Y2=c(6,7,8,9,10)
Y3=c(11,12,13,14,15)
Y4=c(16,17,18,19,20)

由于我正在使用大数据时间序列集,因此根据一个时间段的长度,划分将是任意的。

标签: r

解决方案


您可以使用 basesplit将此向量拆分为每个 5 项长的向量。您还可以使用变量来存储此间隔长度。

使用repwitheach = 5并以编程方式创建一个序列,可以得到一个由数字 1、2、... 组成的序列,长度不超过 5(在本例中为 4),每个序列连续 5 次。然后split返回向量列表。

值得注意的是,各种 SO 帖子会建议您将类似的数据存储在诸如此类的列表中,而不是创建多个变量,因此我将其保留为列表形式。

Y <- 1:20

breaks <- rep(1:(length(Y) / 5), each = 5)
split(Y, breaks)
#> $`1`
#> [1] 1 2 3 4 5
#> 
#> $`2`
#> [1]  6  7  8  9 10
#> 
#> $`3`
#> [1] 11 12 13 14 15
#> 
#> $`4`
#> [1] 16 17 18 19 20

reprex 包(v0.2.1)于 2019 年 2 月 12 日创建


推荐阅读