问题
I was wondering if there is an already made function in R base package that can sort a vector of strings taking into consideration the length of each element and then of course the lexicographical order. For instance after a sort call on some vector holding age groups you would have:
v <- c("00-04", "05-09", "10-14", "100-104", "105-109", "110-114", "15-19", "20-24"..etc)
whereas I would like to have:
v <- c("00-04", "05-09", "10-14", "15-19", "20-24"..etc.. "100-104", "105-109", "110-114")
回答1:
Simply with order
:
v[order(nchar(v), v)]
## [1] "00-04" "05-09" "10-14" "15-19" "20-24" "100-104" "105-109" "110-114"
Is that what you're looking for?
回答2:
Not in R base, but this splits the strings in numeric and character parts and sorts appropriately:
v <- c("00-04", "05-09", "10-14", "100-104", "105-109", "110-114", "15-19", "20-24")
library(gtools)
mixedsort(v)
#[1] "00-04" "05-09" "10-14" "15-19" "20-24" "100-104" "105-109" "110-114"
You can always copy the code of the mixedorder
function defined in the gtools package if you don't want to load/depend on it.
来源:https://stackoverflow.com/questions/22325719/r-base-function-to-sort-vector-of-strings-based-on-length