我有以下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
有没有顺畅而快速的单行解决这个问题?
答案 0 :(得分:3)
我们可以使用sub
删除非数字字符,转换为numeric
和order
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"