如何使用R中的模式将一列拆分为多列
我们知道一个向量为21的列x:如何使用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
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))