R

时间:2015-04-27 08:03:56

标签: r

我有以下矢量:

 mylist <- c("MBT.LN.ID", "ISA51VG.LN.ID", "R848.LN.ID", "sHz.LN.ID", "FK565.LN.ID",
    "bCD.LN.ID", "MALP2s.LN.ID", "ADX.LN.ID", "AddaVax.LN.ID", "FCA.LN.ID",
    "Pam3CSK4.LN.ID", "D35.LN.ID", "ALM.LN.ID", "K3.LN.ID", "K3SPG.LN.ID",
    "MPLA.LN.ID", "DMXAA.LN.ID", "cGAMP.LN.ID", "Poly_IC.LN.ID",
    "cdiGMP.LN.ID")

我希望以不区分大小写的方式按字母顺序排序。

预期的输出是:

 [1] "AddaVax.LN.ID"  "ADX.LN.ID"      "ALM.LN.ID"      "bCD.LN.ID"      "cdiGMP.LN.ID"   "cGAMP.LN.ID"   
 [7] "D35.LN.ID"      "DMXAA.LN.ID"    "FCA.LN.ID"      "FK565.LN.ID"    "ISA51VG.LN.ID"  "K3.LN.ID"      
[13] "K3SPG.LN.ID"    "MALP2s.LN.ID"   "MBT.LN.ID"      "MPLA.LN.ID"     "Pam3CSK4.LN.ID" "Poly_IC.LN.ID" 
[19] "R848.LN.ID"     "sHz.LN.ID"   

我尝试过但失败了(使用R.3.2.0 alpha):

> sort(mylist)
 [1] "ADX.LN.ID"      "ALM.LN.ID"      "AddaVax.LN.ID"  "D35.LN.ID"
 [5] "DMXAA.LN.ID"    "FCA.LN.ID"      "FK565.LN.ID"    "ISA51VG.LN.ID"
 [9] "K3.LN.ID"       "K3SPG.LN.ID"    "MALP2s.LN.ID"   "MBT.LN.ID"
[13] "MPLA.LN.ID"     "Pam3CSK4.LN.ID" "Poly_IC.LN.ID"  "R848.LN.ID"
[17] "bCD.LN.ID"      "cGAMP.LN.ID"    "cdiGMP.LN.ID"   "sHz.LN.ID"

3 个答案:

答案 0 :(得分:14)

尝试

mylist[order(tolower(mylist))]

答案 1 :(得分:6)

正如@Pascal所述,help(Comparison)中记录了这一点,sort是本地特定的。一个选项是切换本地(例如Sys.setlocale("LC_TIME", "us")),但这可能不方便。另一种选择可能是使用gtools::mixedsort,这也很有用,因为你的字符串也包含数字。

library(gtools)
mixedsort(mylist)

# [1] "AddaVax.LN.ID"  "ADX.LN.ID"      "ALM.LN.ID"      "bCD.LN.ID"      "cdiGMP.LN.ID"   "cGAMP.LN.ID"    "D35.LN.ID"      "DMXAA.LN.ID"    "FCA.LN.ID"      "FK565.LN.ID"   
# [11] "ISA51VG.LN.ID"  "K3.LN.ID"       "K3SPG.LN.ID"    "MALP2s.LN.ID"   "MBT.LN.ID"      "MPLA.LN.ID"     "Pam3CSK4.LN.ID" "Poly_IC.LN.ID"  "R848.LN.ID"     "sHz.LN.ID"

答案 2 :(得分:4)

awk '{print $4}' < data.txt | sed -e 's/,/\n/g' | grep "^ref"