在R中对包含字母和数字的字符向量进行排序

时间:2016-07-24 11:57:34

标签: r sorting paste gsub

我有一个数据框列Game,由以下内容组成:(无引号)

"Euro Round 1 West"
"Euro Round 2 Broncos"        
"Euro Round 3 Tigers"      
"Euro Round 4 Tigers"      
"Euro Round 5 Broncos"       
"Euro Round 6 West"     
"Premier12 Round 1 Eagles"  
"Premier12 Round 10 Mac"   
"Premier12 Round 11 Cats"  
"Premier12 Round 12 Owls"  
"Premier12 Round 13 Devils"   
"Premier12 Round 14 Zebras"     
"Premier12 Round 15 Cats"   
"Premier12 Round 16 Zebras"     
"Premier12 Round 17 Owls" 
"Premier12 Round 2 Eagles" 
 ...

我希望此列可以对DataFrame进行排序。

首先按字母顺序排列“欧元”或“标识12”,然后按数字顺序排列“圆形_”

然而,你可以在上面看到第二部分,即数字顺序是这样的:1,10,11,12,13,14,15,16,17,2,3,4 ......

我该如何解决这个问题?

此外,是否可以使用此功能,还可以更改字符顺序并添加括号,如下所示:

"West (Euro Round 1)"
"Broncos (Euro Round 2)"        
"Tigers (Euro Round 3)" 
"Tigers (Euro Round 4)"      
"Broncos (Euro Round 5)"       
"West (Euro Round 6)"     
"Eagles (Premier12 Round 1)"  
"Eagles (Premier12 Round 2)"   
"Devils (Premier12 Round 3)"  
... 

否则:

"West, Euro Round 1"
"Broncos, Euro Round 2"        
"Tigers, Euro Round 3" 
"Tigers, Euro Round 4"      
"Broncos, Euro Round 5"       
"West, Euro Round 6"     
"Eagles, Premier12 Round 1"  
"Eagles, Premier12 Round 2"   
"Devils, Premier12 Round 3"  
... 

由于

我看过How to sort a character vector where elements contain letters and numbers in R?,这与我的问题类似,但我无法弄清楚

1 个答案:

答案 0 :(得分:1)

首先列出你所有的名字

mylist <- list()

将名字列入名单

mylist <- "Premier12 Round 16 Zebras" 

您正在寻找的功能是strsplit

name_string <- strsplit(mylist[1], " ")

以上将在空格处分割你的名字。

只需在每个向量中选择第3个单词即可获得数字。

name_string[3]

遍历您的列表。

制作一个空数据框

mydata <- data.frame()

rownames(mydata) <- c(1:20)

在循环时将每个名称存储在适当的rowname中

strsplit相反的是paste0()。这是你可以插入括号

的地方