如何使用R中的模式将一列拆分为多列

如何使用R中的模式将一列拆分为多列,r,R,我们知道一个向量为21的列x: x 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 如果我想获得具有灵活模式的多个列,如: 可以预先设置数字(n可以是3或4或…): 最终输出是:(这是n=3的情况,但我的最终目标是n可能是4,5…) 如果n设置为n=2,n1=3,n2=4。一列数字将变成14C(1:14)。(实际做法是我不知道需要提前创建多少列。列号由用户输入) 那么我要得到什么n=2列: 1 7 2 8 3 9 4 10 5

我们知道一个向量为21的列x:

x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
如果我想获得具有灵活模式的多个列,如: 可以预先设置数字(n可以是3或4或…):

最终输出是:(这是n=3的情况,但我的最终目标是n可能是4,5…)

如果n设置为n=2,n1=3,n2=4。一列数字将变成14C(1:14)。(实际做法是我不知道需要提前创建多少列。列号由用户输入)

那么我要得到什么n=2列:

1  7
2  8
3  9
4  10
5  11
6  12
   13
   14
我正在尝试使用变量预先自动创建列


非常感谢

我们可以使用
rep
split

split(df1$x,  rep(1:3, c(6, 9, 6)))
#$`1`
#[1] 1 2 3 4 5 6

#$`2`
#[1]  7  8  9 10 11 12 13 14 15

#$`3`
#[1] 16 17 18 19 20 21

可以使用参数“n”和附加参数创建函数,

f1 <- function(dat, n, ...) {

       rgrp <- n * c(...)
       split(dat[[1]][seq_len(sum(rgrp))], rep(seq_len(n), rgrp))
 }

f1(df1, 2, 3, 4)
#$`1`
#[1] 1 2 3 4 5 6

#$`2`
#[1]  7  8  9 10 11 12 13 14   



f1(df1, 3, 2, 3, 2)
#$`1`
#[1] 1 2 3 4 5 6

#$`2`
#[1]  7  8  9 10 11 12 13 14 15

#$`3`
#[1] 16 17 18 19 20 21
 f1 <- function(dat, ...) {
       vec <- c(...)
       n <- length(vec)

       rgrp <- n * vec
       split(dat[[1]][seq_len(sum(rgrp))], rep(seq_len(n), rgrp))
 }

 f1(df1, 3, 4)
如果用户输入“n1”、“n2”,我们可以使用

f1 <- function(dat, n, ...) {

       rgrp <- n * c(...)
       split(dat[[1]][seq_len(sum(rgrp))], rep(seq_len(n), rgrp))
 }

f1(df1, 2, 3, 4)
#$`1`
#[1] 1 2 3 4 5 6

#$`2`
#[1]  7  8  9 10 11 12 13 14   



f1(df1, 3, 2, 3, 2)
#$`1`
#[1] 1 2 3 4 5 6

#$`2`
#[1]  7  8  9 10 11 12 13 14 15

#$`3`
#[1] 16 17 18 19 20 21
 f1 <- function(dat, ...) {
       vec <- c(...)
       n <- length(vec)

       rgrp <- n * vec
       split(dat[[1]][seq_len(sum(rgrp))], rep(seq_len(n), rgrp))
 }

 f1(df1, 3, 4)

f1注释不用于扩展讨论;这段对话已经结束。
 f1 <- function(dat, ...) {
       vec <- c(...)
       n <- length(vec)

       rgrp <- n * vec
       split(dat[[1]][seq_len(sum(rgrp))], rep(seq_len(n), rgrp))
 }

 f1(df1, 3, 4)
df1 <- structure(list(x = 1:21), class = "data.frame", row.names = c(NA, 
-21L))