使用R进行内部排序 - 一次是数字,然后是alpha

时间:2009-12-24 02:07:31

标签: r

我有一个data.frame,如下所示:

nums<-c(5,7,8,9,10,3,2,1)
text<-c("a","b","c","d","a 09","b 09","c 09","d 09")
this <- data.frame()
this <- cbind(text,nums)

"a"   5 
"b"   7
"c"   8
"d"   9
"a 09" 10
"b 09" 3
"c 09" 2
"d 09" 1

a:d = 2010年的数据,09:d:09 = 2009年的数据。 我希望首先按数字列从最大到最小排序,然后按字符串列排序。唯一的问题是字符串列必须在2010年数据下显示09'数据,如下所示:

"d"   9
"d 09" 1
"c"   8
"c 09" 2
"b"   7
"b 09" 3
"a"   5 
"a 09" 10

2 个答案:

答案 0 :(得分:2)

Deducer包对data.frames有一个很好的排序功能:

> library(Deducer)
> text<-c("a","b","c","d","a 09","b 09","c 09","d 09")
> nums<-c(5,7,8,9,10,3,2,1)
> t1<-sapply(text,function(x) strsplit(x," ")[[1]][1])
> t2<-sapply(text,function(x) strsplit(x," ")[[1]][2])
> dat<-data.frame(text,nums,t1,t2)
> sort(dat,by=~-t1 -t2)
     text nums t1   t2
d       d    9  d <NA>
d 09 d 09    1  d   09
c       c    8  c <NA>
c 09 c 09    2  c   09
b       b    7  b <NA>
b 09 b 09    3  b   09
a       a    5  a <NA>
a 09 a 09   10  a   09

答案 1 :(得分:1)

一个建议:

尝试在第一列上运行order(),然后通过分别在奇数和偶数索引上创建索引并分别将它们分配给新的向量来交换每两行。