【问题标题】:Order a data frame using character and numeric columns使用字符和数字列对数据框进行排序
【发布时间】:2014-05-25 21:32:42
【问题描述】:

我有一个数据框:

 df <- data.frame(c(name = "FORT DUNCAN", "DETAR HOSPITAL", "CYPRESS FAIRBANKS","MISSION REGIONAL", "Test"), rate = c(8.0,8.7,8.7,8.1,8.9))
colnames(df) = c("name","rate")
ordered_df <- df[order(df[,2]),]

               name rate
1       FORT DUNCAN  8.0
4  MISSION REGIONAL  8.1
2    DETAR HOSPITAL  8.7
3 CYPRESS FAIRBANKS  8.7
5              Test  8.9

我可以清楚地按速率变量对数据帧进行排序。但是,如果两个费率相似,那么我想按名称订购。即 Detar 医院和 Cypress Fairbanks 的费率相同,均为 8.7。因此,我希望 Cypress Fairbanks 上移,Detar Hospital 下移,Test 应该留在原处(根据费率的最后一个位置)...... 有什么想法???

干杯

【问题讨论】:

    标签: r dataframe multiple-columns


    【解决方案1】:

    我想我是这样解决的:

    ordered_df <- df[order(df$rate, df$name),]
    

    干杯

    【讨论】:

      【解决方案2】:

      由于order 通过... 接受许多变量,您可以执行以下操作:

      > df[order(df[,2],df[,1] ),]
                     name rate
      1       FORT DUNCAN  8.0
      4  MISSION REGIONAL  8.1
      3 CYPRESS FAIRBANKS  8.7
      2    DETAR HOSPITAL  8.7
      5              Test  8.9
      

      【讨论】:

      • 这是一个非常好的答案,但如果在速率中您的值为“10.1、10.3、9.9”,则它不起作用,因为“10.1”在 9.9 之前排序。我找不到解决办法。
      • @efrem(可能你有一个字符率,这不好,与示例不同,无论如何df[order(as.numeric(df[,2]), df[,1]), ]
      猜你喜欢
      • 1970-01-01
      • 2014-05-08
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多