gpt4 book ai didi

r - R 中存在关系时因子变量的所有可能排列

转载 作者:行者123 更新时间:2023-12-04 12:25:24 28 4
gpt4 key购买 nike

我有一个数据框,其中的行按变量 x 的值排序。如果 x 的值有关系(如下例中的值 50 和 60),我需要变量 group 中所有可能的值排列。我如何在 R 中实现这一点?有专门的功能吗?

初始数据:

x  group
45 A
50 A
50 A
50 B
52 A
60 A
60 B
70 B
88 B

期望的结果:

x  group group2 group3 group4 group5 group6
45 A A A A A A
50 A A B A A B
50 A B A A B A
50 B A A B A A
52 A A A A A A
60 A A A B B B
60 B B B A A A
70 B B B B B B
88 B B B B B B

最佳答案

可能是一个复杂的答案。试试这段代码

 df <- read.table(text = 'x  group
45 A
50 A
50 A
50 B
52 A
60 A
60 B
70 B
88 B', header = TRUE)

library(data.table)
library(gtools)
ss <- list()
setDT(df)[, {n = .N; ss <<- append(ss, list(data.frame(apply(gtools::permutations(n = n, r = n), 1, function(x) group[x])))); NULL}, by = 'x']
max_col <- max(sapply(ss, length))
ss[] <- lapply(ss, function(x) {
y <- x
while(length(y) < max_col)
y <- data.frame(y, x[, 1:min(length(x), max_col - length(y))])
names(y) <- paste0('group', 1:max_col)
y
})
tt <- do.call('rbind', ss)
tt$x <- df$x
tt

最终输出

  group1 group2 group3 group4 group5 group6  x
1 A A A A A A 45
2 A A A A B B 50
3 A B A B A A 50
4 B A B A A A 50
5 A A A A A A 52
6 A B A B A B 60
7 B A B A B A 60
8 B B B B B B 70
9 B B B B B B 88

关于r - R 中存在关系时因子变量的所有可能排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47565066/

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