【问题标题】:sort numerical characters within a string in r在r中对字符串中的数字字符进行排序
【发布时间】:2021-09-07 05:44:06
【问题描述】:

我正在尝试对字符串中的数字进行排序:

library(gtools)
gtools::mixedsort("[20,12,30]", decreasing = FALSE)

返回相同的字符串:

"[20,12,30]"

预期输出:

"[12,20,30]"

我是否遗漏了mixedsort() 中的任何参数?

还有其他方法可以完成这项任务吗?

【问题讨论】:

    标签: r string sorting


    【解决方案1】:

    我们可以提取元素,排序和粘贴

    library(purrr)
    library(stringr)
    map_chr(str_extract_all("[20,12,30]", "\\d+"),
           ~ sprintf('[%s]', toString(sort(as.numeric(.x)))))
    

    -输出

    [1] "[12, 20, 30]"
    

    或者在base R中,另一种选择是将[/]替换为(/),附加ceval/parse以返回数字向量sort,然后用@987654329重构原始格式@

    sprintf('[%s]', toString(sort(eval(parse(text =
           paste0("c", chartr("[]", "()", "[20,12,30]")))))))
    [1] "[12, 20, 30]"
    

    另一种选择是使用reticulate,因为格式字符串是python 中的list 结构

    library(reticulate)
    py_run_string(paste0("a=", "[20,12,30]"))
    sprintf('[%s]', toString(sort(py$a)))
    [1] "[12, 20, 30]"
    

    mixedsort/mixedorder 不在字符串内排序,而是跨字符串排序

    【讨论】:

      猜你喜欢
      • 2016-07-29
      • 2022-11-25
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多