为了账号安全,请及时绑定邮箱和手机立即绑定

如何对R中元素包含字母和数字的字符向量进行排序?

如何对R中元素包含字母和数字的字符向量进行排序?

慕田峪4524236 2019-08-02 17:25:59
如何对R中元素包含字母和数字的字符向量进行排序?我有一个字符数组cf <- c("V440","V457","V116","V327","V446","V108",          "V155","V217","V120","V51","V477")我想按降序排序,以便我有这样的输出:V51 V108 V116 V120 V155 V217 V327 V440 V446 V457 V477我试过sort.list()这样的cf[sort.list(cf)]得到了这个答案:[1] "V108" "V116" "V120" "V155" "V217" "V327" "V440" "V446" "V457" "V477" "V51"并尝试order()了同样的结果。有谁可以帮助我吗
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

试试mixedsort“gtools”套餐:


> # install.packages("gtools") ## Uncomment if not already installed

> library(gtools)

> mixedsort(cf)

 [1] "V51"  "V108" "V116" "V120" "V155" "V217" "V327" "V440" "V446" "V457" "V477"

如果你不想使用mixedsort(不确定为什么不会),如果你的矢量有一个相当一致的模式(例如字母跟数字),你也可以尝试这样的事情。(注意:相对未经测试。)


newvec <- c("V440", "V457", "V116", "V327", "V446", "V108", "V155", 

            "V217", "V120", "V51", "V477", "B22", "A10", "Z01")


newvec[order(gsub("([A-Z]+)([0-9]+)", "\\1", newvec), 

             as.numeric(gsub("([A-Z]+)([0-9]+)", "\\2", newvec)))]

#  [1] "A10"  "B22"  "V51"  "V108" "V116" "V120" "V155" "V217" "V327" "V440"

# [11] "V446" "V457" "V477" "Z01" 


查看完整回答
反对 回复 2019-08-02
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

这里有很多正确的答案,这是另一种方式,只是为了好玩。

cf[order(nchar(cf), cf)]# [1] "V51"  "V108" "V116" "V120" "V155" "V217" "V327" "V440" "V446" "V457" "V477"


查看完整回答
反对 回复 2019-08-02
?
慕的地10843

TA贡献1785条经验 获得超8个赞

使用str_sort函数的一行代码中的另一个解决方案(来自 stringrpackg)

# install.packages("stringr") ## Uncomment if not already installedlibrary(stringr)

str_sort(cf, numeric = TRUE)

[1] "V51"  "V108" "V116" "V120" "V155" "V217" "V327" "V440" "V446" "V457" "V477"


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 4727 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信