【问题标题】:Order a data table alphanumerically by alphabet then numeric values in R按字母数字顺序排列数据表,然后按 R 中的数值
【发布时间】:2016-10-15 07:45:21
【问题描述】:

我在 R 中有一个数据表,我希望按字母顺序然后按数字顺序对单个列进行排序。

例如,该列可能有类似的条目:

v1<- c("All", "1.2 - Social Care", "2.1 - Science", "1.1 - Health")

使用排序功能

v1[order(v1)]

导致

[1] "1.1 - Health"      "1.2 - Social Care" "2.1 - Science"     "All"

但是,我想要的是:

"All"     "1.1 - Health"    "1.2 - Social Care"    "2.1 - Science"

如何在数字之前按字母排序?

【问题讨论】:

    标签: r sorting datatable


    【解决方案1】:

    您可以使用正则表达式来识别哪些条目以数字开头并将它们放在最后:

    w = grep("^[0-9]", v1)
    c(sort(v1[-w]), sort(v1[w]))
    # "All"               "1.1 - Health"      "1.2 - Social Care" "2.1 - Science" 
    

    有关 R 中正则表达式的更多信息,请键入 ?regex?grep。或者,您可以构造w = which(substr(v1,1,1) %in% 0:9),类似于@MikeyMike 的答案。

    【讨论】:

      【解决方案2】:

      另一种方法是在以字母开头的条目前添加“0 -”:

      v1[grep("^[a-zA-Z]", v1)] <- paste0("0 - ", v1[grep("^[a-zA-Z]", v1)])
      
      sort(v1)
      [1] "0 - All"           "1.1 - Health"      "1.2 - Social Care" "2.1 - Science"
      

      【讨论】:

        【解决方案3】:

        另一种方法是直接使用 order 函数首先对字符串的第一个字符是否为数字进行排序,然后像往常一样对v1 进行排序。

        v1[order(-grepl("[[:alpha:]]", substr(v1,1,1)), v1)]
        
        [1] "All"               "1.1 - Health"      "1.2 - Social Care" "2.1 - Science"  
        

        【讨论】:

          猜你喜欢
          • 2020-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多