如何实现提取/分离函数(来自dplyr和tidyr)将一列分离为多列。基于任意值?
我有一个专栏:如何实现提取/分离函数(来自dplyr和tidyr)将一列分离为多列。基于任意值?,r,R,我有一个专栏: 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) 由于我使用的是大数据时间序列集,因此根据一个时间段的长度,划分将是任意的 不是dplyr解决方案,但我相信最简单的方法是使用矩阵 foo = function(data,
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)
由于我使用的是大数据时间序列集,因此根据一个时间段的长度,划分将是任意的 不是dplyr解决方案,但我相信最简单的方法是使用矩阵
foo = function(data, sep.in=5) {
data.matrix = matrix(data,ncol=5)
data.df = as.data.frame(data.matrix)
return(data.df)
}
我没有测试它,但是这个函数应该创建一个data.frame,可以使用
cbind()
而不是dplyr解决方案将其合并到现有的data.frame,但我相信最简单的方法是使用矩阵
foo = function(data, sep.in=5) {
data.matrix = matrix(data,ncol=5)
data.df = as.data.frame(data.matrix)
return(data.df)
}
我还没有测试它,但是这个函数应该创建一个data.frame,可以使用
cbind()
将其合并到现有的data.frame中。您可以使用basesplit
将此向量拆分为每个5个项目长的向量。您还可以使用变量来存储此间隔长度
使用rep
和each=5
并以编程方式创建序列,可以获得数字1、2、。。。长度除以5(在本例中为4),每次连续5次。然后split
返回向量列表
值得注意的是,各种各样的SO帖子都会建议您将类似的数据存储在这样的列表中,而不是创建多个变量,所以我在这里将其保留为列表形式
Y[1]12345
#>
#> $`2`
#> [1] 6 7 8 9 10
#>
#> $`3`
#> [1] 11 12 13 14 15
#>
#> $`4`
#> [1] 16 17 18 19 20
由(v0.2.1)创建于2019-02-12。您可以使用基本
split
将该向量拆分为每5个项目长的向量。您还可以使用变量来存储此间隔长度
使用rep
和each=5
并以编程方式创建序列,可以获得数字1、2、。。。长度除以5(在本例中为4),每次连续5次。然后split
返回向量列表
值得注意的是,各种各样的SO帖子都会建议您将类似的数据存储在这样的列表中,而不是创建多个变量,所以我在这里将其保留为列表形式
Y[1]12345
#>
#> $`2`
#> [1] 6 7 8 9 10
#>
#> $`3`
#> [1] 11 12 13 14 15
#>
#> $`4`
#> [1] 16 17 18 19 20
由(v0.2.1)于2019-02-12创建的我们可以利用
split
(将注释代码作为解决方案写入将向量
拆分为向量
的列表
lst <- split(Y, as.integer(gl(length(Y), 5, length(Y))))
lst
#$`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
如果希望在全局环境中有多个对象,请使用list2env
list2env(setNames(lst, paste0("Y", seq_along(lst))), envir = .GlobalEnv)
Y1
#[1] 1 2 3 4 5
Y2
#[1] 6 7 8 9 10
Y3
#[1] 11 12 13 14 15
Y4
#[1] 16 17 18 19 20
或者正如问题中提到的OPdplyr/tidyr
,我们也可以使用这些包
library(tidyverse)
tibble(Y) %>%
group_by(grp = (row_number()-1) %/% 5 + 1) %>%
summarise(Y = list(Y)) %>%
pull(Y)
#[[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
数据
Y我们可以利用split
(将注释代码作为解决方案写入将向量
拆分为向量
的列表
lst <- split(Y, as.integer(gl(length(Y), 5, length(Y))))
lst
#$`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
如果希望在全局环境中有多个对象,请使用list2env
list2env(setNames(lst, paste0("Y", seq_along(lst))), envir = .GlobalEnv)
Y1
#[1] 1 2 3 4 5
Y2
#[1] 6 7 8 9 10
Y3
#[1] 11 12 13 14 15
Y4
#[1] 16 17 18 19 20
或者正如问题中提到的OPdplyr/tidyr
,我们也可以使用这些包
library(tidyverse)
tibble(Y) %>%
group_by(grp = (row_number()-1) %/% 5 + 1) %>%
summarise(Y = list(Y)) %>%
pull(Y)
#[[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
数据
Y它看起来不像R
语法。如果Y进行了修改!使用tidyverse
tibble(Y)%%>%groupby(grp=(row\u number()-1)%%/%5+1)%%>%summary(Y=list(Y))
它看起来不像R
语法。如果Y进行了修改!使用tidyverse
tibble(Y)%%>%groupby(grp=(row_number()-1)%%/%5+1)%%>%summary(Y=list(Y))
请您提供一些代码,说明如何在多个变量中获得相同的结果。我打算创建一个移动窗口,以可视化这些分区的多个图。如果您需要更广泛问题的帮助,您应该更新问题,以包含更多数据或您最初描述的更多情况。请您包含一些代码,说明如何在多个变量中获得相同的结果。我打算创建一个移动窗口,以可视化这些分区的多个图。如果您需要更大范围问题的帮助,您应该更新问题,以包含您最初描述的更多数据或更多情况