【问题标题】:How to order numeric values in a designed order in R?如何在 R 中按设计顺序对数值进行排序?
【发布时间】:2022-11-02 09:46:58
【问题描述】:

我的问题是:给定目标表(右侧),我如何订购原始表(左侧)的行以使用 R 准确获取目标表?先感谢您。

原表:

A   B
1   1
1   2
5   12
2   6
5   14
3   6
3   7
5   13
6   2
3   10
5   11
2   5
6   14
2   7
5   15
6   1
3   8
6   3
2   4
1   3
2   10
4   11
2   8
1   4
1   5
2   9
4   12
4   13
3   9
6   15

目标表:

A   B
1   1
1   2
1   3
1   4
1   5
3   6
3   7
3   8
3   9
3   10
5   11
5   12
5   13
5   14
5   15
6   1
6   2
6   3
2   4
2   5
2   6
2   7
2   8
2   9
2   10
4   11
4   12
4   13
6   14
6   15

【问题讨论】:

    标签: r


    【解决方案1】:

    这可以通过ordering 通过奇/偶标志和dat$B 来完成:

    dat[order(-(dat$A %% 2), dat$B),]
    ##   A  B
    ##1  1  1
    ##2  1  2
    ##20 1  3
    ##24 1  4
    ##25 1  5
    ##6  3  6
    ##7  3  7
    ##17 3  8
    ##29 3  9
    ##10 3 10
    ##11 5 11
    ##3  5 12
    ##8  5 13
    ##5  5 14
    ##15 5 15
    ##16 6  1
    ##9  6  2
    ##18 6  3
    ##19 2  4
    ##12 2  5
    ##4  2  6
    ##14 2  7
    ##23 2  8
    ##26 2  9
    ##21 2 10
    ##22 4 11
    ##27 4 12
    ##28 4 13
    ##13 6 14
    ##30 6 15
    

    如果不是奇数/偶数拆分,那么您可以手动设置1/3/52/4/6 组:

    dat[order(`levels<-`(factor(dat$A), list('1'=c(1,3,5), '2'=c(6,2,4))), dat$B),]
    

    这个带有levels&lt;- 直接作为函数调用的代码的折叠版本有点难以阅读,但它相当于:

    grpord <- factor(dat$A)
    levels(grpord) <- list('1'=c(1,3,5), '2'=c(6,2,4))
    dat[order(grpord, dat$B),]
    

    ...其中"1" 分配给组 1、3 和 5,"2" 分配给组 6、2 和 4。

    【讨论】:

    • 天哪,它有效!谢谢@thelatemail!
    • 顺便说一下,能否请您稍微解释一下这部分的语法:levels&lt;-(factor(dat$A), list('1'=c(1,3,5), '2'=c(6) ,2,4))) 例如,为什么在 level<- 周围有一对引号
    • @JoyceZ - 现在显示的级别分配的扩展版本。 `levels&lt;-` 是一个函数,通常表示为 levels(x) &lt;- ... 而不是直接调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多