如何删除数字值作为字符并根据单位编号重新排列字符串

126*_*7b9 1 string r character

我有这个字符串

 D = c("0" , "11", "12", "13", "14", "15", "16", "21", "22", "23", "24", "25", "26", "31", "32", "33", "34", "35", "36", "41", "42", "43", "44","45", "46","51","52", "53", "54", "55", "56", "61", "62", "63", "64", "65", "66") 
Run Code Online (Sandbox Code Playgroud)
  1. 如果我想删除那些低于 30 的字符而不将字符串转换为数字,我该怎么办?

  2. 如果我想根据单元号重新排序字符串(这意味着所有最后一个为 1 的字符串都排在最后两个为最后一个的字符串之前,依此类推,例如 31、41、51、61、32、42 等,这应该是操作?

谢谢

Maë*_*aël 5

您不必转换为数字,D[D >= 30]工作正常。>=也适用于字符向量,排序取决于您的区域设置。查看?Comparison更多详细信息。

D[D >= "30"]
#[1] "31" "32" "33" "34" "35" "36" "41" "42" "43" "44" "45" "46" "51" "52" "53" "54" "55" "56" "61" "62" "63" "64" "65" "66"
Run Code Online (Sandbox Code Playgroud)

对于排序,这将起作用(但可能仅当您有 2 位数字时):

str_rev <- stringi::stri_reverse
str_rev(sort(str_rev(D[D >= "30"])))
# [1] "31" "41" "51" "61" "32" "42" "52" "62" "33" "43" "53" "63" "34" "44" "54" "64" "35"
#[18] "45" "55" "65" "36" "46" "56" "66"
Run Code Online (Sandbox Code Playgroud)

或者与str_sub

library(stringr)        
D[order(str_sub(D, -1, -1))]
Run Code Online (Sandbox Code Playgroud)