【问题标题】:How to sort a vector of strings based on the last Character in R如何根据R中的最后一个字符对字符串向量进行排序
【发布时间】:2021-03-20 16:12:42
【问题描述】:

我想根据 R 中的最后一个字符对字符串向量进行排序。 假设我有 m

m <- names(df)
m
[1] "test_1_p" "test_2_n" "test_3_p" "test_4_p" "test_5_n"

为了重现性:

m <- c("test_1_p","test_2_n","test_3_p","test_4_p","test_5_n")

现在我想要的输出是

[1] "test_2_n" "test_5_n" "test_1_p" "test_3_p" "test_4_p" 

我尝试使用strsplit,但无法正常工作

r = strsplit(m,"_")
sorting_df = data.frame(r)
sort(sorting_df[3,])

我相信必须有一个相当简单的解决方案,可以与 python 相媲美,人们可以轻松地做到这一点like this

lst = ["test_1_p","test_2_n","test_3_p","test_4_p","test_5_n"]
sorted(lst, key=lambda x: x[-1])

编辑 非常感谢您提供的所有解决方案。刚刚接受了第一个。

【问题讨论】:

    标签: r string sorting


    【解决方案1】:

    您可以从字符串中获取最后一部分并使用它的order 来对字符串进行子集化。

    m[order(sub('.*_', '', m))]
    #[1] "test_2_n" "test_5_n" "test_1_p" "test_3_p" "test_4_p"
    

    【讨论】:

      【解决方案2】:

      这行得通吗:

      m[order(substr(m,nchar(m),nchar(m)))]
      [1] "test_2_n" "test_5_n" "test_1_p" "test_3_p" "test_4_p"
      

      【讨论】:

        【解决方案3】:

        这是funprog::sort_by的解决方案:

        lastChar <- function(str){
          substr(str, nchar(str), nchar(str))
        }
        library(funprog)
        sort_by(m, lastChar)
        

        【讨论】:

          【解决方案4】:

          我们可以使用stri_extract_last

          library(stringi)
          m[order(stri_extract_last(m, regex = "\\w"))]
          #[1] "test_2_n" "test_5_n" "test_1_p" "test_3_p" "test_4_p"
          

          【讨论】:

            猜你喜欢
            • 2016-02-02
            • 2015-08-13
            • 2016-07-29
            • 1970-01-01
            • 2014-09-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-27
            相关资源
            最近更新 更多