在R中的字符列中的数字之后排序data.frame

时间:2016-07-03 14:23:00

标签: r dataframe

我有以下data.frame

ID<-c("ID_1","ID_2","ID_3","ID_5","ID_1008","ID_6","ID_10")
SomethingElse<-c(5,6,7,1,2,3,1)
SomeText<-c("Thank","you","for","the","!","help","!")
df<-data.frame(ID,SomethingElse,SomeText)

我需要的是根据ID列对data.frame进行排序,但是对于其中的Numbers(1,2,3,5,1008,6,10),结果如下: / p>

    ID  SomethingElse    SomeText
   ID_1             5    Thank
   ID_2             6      you
   ID_3             7      for
   ID_5             1      the
   ID_6             3     help
  ID_10             1        !
ID_1008             2        !

我的问题是使用命令df[order(df$ID),]时 它按字典顺序排序结果  这是“错误的”,如下所示:

     ID SomethingElse SomeText
    ID_1             5    Thank
   ID_10             1        !
 ID_1008             2        !
    ID_2             6      you
    ID_3             7      for
    ID_5             1      the
    ID_6             3     help

有没有顺畅而快速的单行解决这个问题?

1 个答案:

答案 0 :(得分:3)

我们可以使用sub删除非数字字符,转换为numericorder

df[order(as.numeric(sub("\\D+", "", df$ID))),]
#       ID SomethingElse SomeText
#1    ID_1             5    Thank
#2    ID_2             6      you
#3    ID_3             7      for
#4    ID_5             1      the
#6    ID_6             3     help
#7   ID_10             1        !
#5 ID_1008             2        !

\\D+匹配“ID&#39;”中的另外一个非数字元素。列,我们将其替换为''

sub("\\D+", "", df$ID)
#[1] "1"    "2"    "3"    "5"    "1008" "6"    "10"