gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:59:35 26 4
gpt4 key购买 nike

我们知道一个列 x 有一个类似 21 个数字的向量:

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,n1=2,n2=3,n3=2,.... the total number of columns is determined by number n.
column n=3, for column1:row=n*n1 and column2: row= n*n2, column3:row=n*n3 (Here, the number could be variables)

最终输出是:(这是 n=3 的情况,但我的最终目标是 n 可能是 4,5...)
1   7   16
2 8 17
3 9 18
4 10 19
5 11 20
6 12 21
13
14
15

如果 n 设置为 n=2,n1=3,n2=4。一列编号将变为 14 c(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

如果用户提交 vector而我们没有 n ,然后得到 n来自 length向量的
f1 <- function(dat, vec) {
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, ...) {
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))

关于r - 如何使用R中的模式将一列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61858689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com