gpt4 book ai didi

r - `reorder()` 中 `R` 背后的逻辑?

转载 作者:行者123 更新时间:2023-12-04 10:38:05 26 4
gpt4 key购买 nike

我很难理解 reorder() 背后的逻辑。

假设 Var 定义如下:

Var <- factor(c(0.2, 0.1, -0.1))
order(Var)

现在,如果我想将它重新排序为 c(1, 2, 3),我将运行以下代码,它工作得很好。

Needed_Order <- c(1, 2, 3)
Var <- reorder(Var, Needed_Order)
order(Var)

但是如果我想将 Var 重新排序为 c(3, 1, 2) 则它不起作用

Needed_Order <- c(3,1,2)
Var <- reorder(Var, Needed_Order)
order(Var)

我希望得到 3 1 2 作为 order(var) 的输出,但它返回 2 3 1

最佳答案

我认为@prosoitos 已经有了很好的答案。我只是想说明为什么存在 reorder 函数及其用途。

在图中排序组

让我们考虑经典的 iris 数据集

> data(iris)
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

假设我们要绘制 Sepal.Width 值,按 Species

进行比较
boxplot(Sepal.Width ~ Species, iris)

enter image description here

但这里的顺序是按物种名称排序,而我们认为如果按每个物种的平均萼片宽度排序,绘图会更好看。这就是 reorder 是一个快速、强大的解决方案的地方:

iris$Species <- reorder(iris$Species, iris$Sepal.Width, FUN=mean)
boxplot(Sepal.Width ~ Species, iris)

enter image description here

这里发生的事情是 iris$Sepal.Width 对应于 iris$Species 中每个级别的值都应用了函数 mean它们和结果作为 scores 属性附加到该因素:

> attr(iris$Species, 'scores')
setosa versicolor virginica
3.428 2.770 2.974

然后使用这些分数对因素中的水平进行排名(按升序排列),并按该顺序分配它们:

> levels(iris$Species)
[1] "versicolor" "virginica" "setosa"

请注意,这不会更改数据框中任何数据 的顺序,只会更改因子中使用的代码的顺序。 FUN 参数使 reorder 函数非常通用,因此可以按最小值或最大值或您想要对分组数据计算的任何函数进行排序。

总的来说,我认为关键是 reorder 函数中的第二个参数,它被认为是一个期望的顺序,而是用于输入与每个条目相关的权重或值因素。

关于r - `reorder()` 中 `R` 背后的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53423360/

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