Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现提取/分离函数(来自dplyr和tidyr)将一列分离为多列。基于任意值?_R - Fatal编程技术网

如何实现提取/分离函数(来自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中。您可以使用base
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
将该向量拆分为每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

或者正如问题中提到的OP
dplyr/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

或者正如问题中提到的OP
dplyr/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))
请您提供一些代码,说明如何在多个变量中获得相同的结果。我打算创建一个移动窗口,以可视化这些分区的多个图。如果您需要更广泛问题的帮助,您应该更新问题,以包含更多数据或您最初描述的更多情况。请您包含一些代码,说明如何在多个变量中获得相同的结果。我打算创建一个移动窗口,以可视化这些分区的多个图。如果您需要更大范围问题的帮助,您应该更新问题,以包含您最初描述的更多数据或更多情况