【问题标题】:Sorting a data.frame in R [duplicate]在R中对data.frame进行排序[重复]
【发布时间】:2015-06-21 00:25:30
【问题描述】:

我正在寻找有关使用字母数字组件对data.frame 进行排序的建议:

假设我们有:

A = c("A1","A10","A11","A2")
B = c(1,2,3,4)

C = data.frame(A,B)

我怎样才能以我们最后的方式对 C data.frame 进行排序:

C$A 的顺序为:“A1”、“A2”、“A10”、“A11”。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    假设每个条目的开头只有一个字母组成部分,一个合理的策略是先按该字母(使用字符(字母)排序)排序,然后按数字组成部分(使用数字排序)。

    (我假设您可能想在字母不固定的情况下使用它。)

    你可以这样做:

    C[order(substr(A,1,1), as.numeric(substr(A, 2,length(A)))),]
    

    如果字符串比 1 个字母后跟数字更通用,您可以使用正则表达式来选择合适的字符串进行排序。

    【讨论】:

      【解决方案2】:

      您可以尝试“gtools”包中的mixedorder。它的作用如下:

      > library(gtools)
      > mixedorder(as.character(C$A))
      [1] 1 4 2 3
      

      所以,按“A”列排序:

      C[mixedorder(as.character(C$A)), ]
      ##     A B
      ## 1  A1 1
      ## 4  A2 4
      ## 2 A10 2
      ## 3 A11 3
      

      您还可以通过以下方式获得相同的排序:

      order(nchar(as.character(C$A)))
      ## [1] 1 4 2 3
      

      【讨论】:

        猜你喜欢
        • 2012-04-01
        • 2021-11-16
        • 2019-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        • 2018-10-11
        相关资源
        最近更新 更多