gpt4 book ai didi

r - 根据 R 中另一列的顺序对一列进行排序

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

下面的 R 脚本创建一个包含三列的数据框 a123。 a1 列有三个出现在不同位置的变量,分别对应 a2 和 a3 值。

a1 = c("A", "B", "C", "A", "B", "B", "A", "C", "A", "C", "B")
a2 = c( 10, 8, 11 , 6 , 4 , 7 , 9 , 1 , 3 , 2, 7)
a3 = c( 55, 34, 33, 23, 78, 33, 123, 34, 85, 76, 74)
a123 = data.frame(a1, a2, a3)

我的需求是,我希望与a1列值对应的a3列值根据a2值的顺序按升序排列。另外,如果遇到常见的a2值,则相应的a3列值应按升序排列。例如,假设 a1 列中的值“A”在 a2 和 a3 中具有以下值,

a2 = c(10, 6, 9, 3)
a3 = c(55, 23, 123, 85)

这些值可以是这样的:

a3 = c(123, 23, 85, 55)

预期结果:

a1 = c("A", "B", "C", "A", "B", "B", "A", "C", "A", "C", "B")
a2 = c( 10, 8, 11, 6, 4, 7, 9, 1, 3, 2, 7)
a3 = c( 123, 78, 76, 23, 33, 34, 85, 33, 55, 34, 74)
a123 = data.frame(a1, a2, a3)

谢谢,请帮忙。 注意:请尽量避免循环和条件,因为它们可能会减慢基于大数据的计算。

最佳答案

使用dplyrsortrank的解决方案。我不完全理解你的逻辑,但这可能是你正在寻找的东西。请注意,我假设组 Aa3 中的元素为 123, 55, 85, 23

library(dplyr)

a123_r <- a123 %>%
group_by(a1) %>%
mutate(a3 = sort(a3, decreasing = TRUE)[rank(-a2, ties.method = "last")]) %>%
ungroup() %>%
as.data.frame()
a123_r
# a1 a2 a3
# 1 A 10 123
# 2 B 8 78
# 3 C 11 76
# 4 A 6 55
# 5 B 4 33
# 6 B 7 34
# 7 A 9 85
# 8 C 1 33
# 9 A 3 23
# 10 C 2 34
# 11 B 7 74

关于r - 根据 R 中另一列的顺序对一列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48037056/

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