gpt4 book ai didi

r - 如何使用 R 对数据进行反排序

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

我不确定如何命名它,但如果我有一个值列表,例如:

set.seed(2084)
vals = round(runif(12, 1, 3))

[1] 2 3 2 2 1 1 3 2 1 2 2 2

我对它进行了排序:

[1] 1 1 1 2 2 2 2 2 2 2 3 3

但我想得到类似交替排序的东西(取 1-2-3 并重复):

1 2 3 1 2 3 1 2 2 2 2 2

但问题是有 7 个二值,它们落后于列表,而不是在其他值之间交替。我宁愿期望得到类似的东西:

1 2 2 3 1 2 2 2 1 2 2 3

或者

1 2 2 3 1 2 2 3 1 2 2 2

我怎样才能索引它以获得这个“增长和切割”顺序的最均匀分布的值?

对我的想法发表一些看法。从 N 个唯一值的集合(这里是 3 个)中,我们需要将它们中的每一个尽可能地分布在彼此之间(以及远离该向量的边界)。因此,虽然我们有 1 和 10 个插槽,但我们可以将其放入以下模式中:

= 1 = = = 1 = = = 1

或者

= = 1 = = 1 = = 1 =

除非其他数字在此列表中具有适当的位置,否则它是正确的。我们可以添加三个:

= 3 1 = = 1 = 3 1 =

现在,我们只有两个要填写。他们不会有理想的位置。我认为最好从具有最丰富值的数字开始。

我想说清楚并描述一些算法,但我觉得反之亦然。

# 编辑 #
我猜对于较大的数据集,该主题可以代表“如何使用 R 在给定向量中均匀分布值”。如果反弹导致误解,这可能是一种安全退出这种情况。但是在这里我不想有 2 个数字,而 5 个插槽可用。

对于 1 2 2 3 4有一个替代方案,例如 1 2 3 4 2 .

编辑 2

我找到了一个用于 2 个值的函数 - 它是半解决方案,但这个想法正在奏效。我认为它会迭代超过 2 个值,但也许我错了。

它不是很优雅
antisort <- function(vals) {
l = length(unique(vals))
mx = names(which.max(table(vals)))
mn = names(which.min(table(vals)))
mxn = max(table(vals))
indx = round(seq(from = 1, to = length(vals), length.out = mxn))
vec = NULL
for (i in indx) {
vec[i] <- mx
}
vec[which(is.na(vec))] <- mn
return(vec)
}

数据:
set.seed(2201)
vals = round(runif(12, 1, 2))

跑:
antisort(vals)

结果(不管它是串起来的)

“2”“1”“2”“1”“2”“2”“1”“2”“1”“2”“1”“2”

最佳答案

其中之一可能是您所追求的:

rep_len(unique(vals), length(vals))

或者
rep_len(sort(unique(vals)), length(vals))

关于r - 如何使用 R 对数据进行反排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54469177/

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