【问题标题】:Mixedorder data frame in R [duplicate]R中的混合顺序数据框[重复]
【发布时间】:2018-09-13 18:58:56
【问题描述】:

我有一个如下所示的数据框:

a = c("1A","10A","11A","2B","2C","22C","3A","3B")
b= c(1,2,3,4,5,6,7,8)
ab = data.frame(a,b)

我想根据a 列对其进行排序。我尝试了混合顺序

library(gtools)
ab[mixedorder(ab$a),]

但我没有得到我想要的结果 (1A,2B,2C,3A,3B..)。 我该如何解决这个问题?

【问题讨论】:

    标签: r sorting mixed


    【解决方案1】:

    我们需要转换为character 类(因为'a' 列是factor 基于data.frame 调用中的默认选项,即stringsAsFactors=TRUE

    ab[mixedorder(as.character(ab$a)),]
    #    a b
    #1  1A 1
    #4  2B 4
    #5  2C 5
    #7  3A 7
    #8  3B 8
    #2 10A 2
    #3 11A 3
    #6 22C 6
    

    here 中还解释了其他选项

    【讨论】:

      【解决方案2】:

      我只是拆分列。如果您希望 ID 的数字部分按数字顺序排列,您可能应该将这些数字作为数字列。

      ab$a1 <- as.numeric(gsub("[[:alpha:]+]", "", ab$a))
      ab$a2 <- gsub("\\d+", "", ab$a)
      
      ab[order(ab$a1, ab$a2),]
      #    a b a1 a2
      #1  1A 1  1  A
      #4  2B 4  2  B
      #5  2C 5  2  C
      #7  3A 7  3  A
      #8  3B 8  3  B
      #2 10A 2 10  A
      #3 11A 3 11  A
      #6 22C 6 22  C
      

      【讨论】:

      • 也可能是setDT(ab)[do.call(order, tstrsplit(ab$a, "(?=\\D)", perl = TRUE, type.convert = TRUE))]
      猜你喜欢
      • 2013-04-09
      • 2016-03-20
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多