Внутренняя сортировка с R - один раз по цифре, затем по альфа - PullRequest
0 голосов
/ 24 декабря 2009

У меня есть 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 год, a 09: d: 09 = данные за 2009 год. Я бы хотел, чтобы он сортировался сначала по числовому столбцу от наибольшего к наименьшему, а затем по строковому столбцу. Единственный улов заключается в том, что в строковом столбце должны отображаться данные 09 'под данными 2010 года, например:

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

Ответы [ 2 ]

2 голосов
/ 24 декабря 2009

В пакете 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 голос
/ 24 декабря 2009

Одно предложение:

Попробуйте запустить order () в первом столбце, а затем поменяйте местами каждые две строки, создав отдельный индекс для нечетного и четного индексов и назначив их соответственно новому вектору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...