Внутренняя сортировка с R - сначала по числовому, затем по альфа (V2) - PullRequest
0 голосов
/ 09 января 2010

Я уже задавал этот вопрос и получил решение, но моя проблема несколько отличается от первоначального объяснения

У меня есть фрейм данных, например:

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

"Company a: d" = данные за 2010 год, "Company a 09: d: 09" = данные за 2009 год. Я бы хотел, чтобы они сначала сортировались по числовому столбцу от наибольшего к наименьшему, а затем по строке колонка. Единственный улов заключается в том, что в строковом столбце должны отображаться данные 09 'под данными 2010 года, например:

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

Было несколько предложений от этого вопроса , но я не могу повторить его для этого, несколько более сложного примера.

Я загрузил данные испытаний .

1 Ответ

2 голосов
/ 09 января 2010

Как насчет этого?

## Read in the data
foo <- read.csv("testdata.csv")
## Normalize names so that things work later.
foo$Company <- toupper(gsub(" *$", "", foo$Company))

## Split the data into 09 and not 09.
not.09 <- subset(foo, !grepl("09$", Company))
is.09 <- subset(foo, grepl("09$", Company))

## Figure out where the not09 should go (even indices)
not.09$Index <- 2 * order(not.09$Score, decreasing=TRUE)

## Find out where the 09s should go (odd indices)
is.09$Index <- not.09[match(is.09$Company, paste(not.09$Company, "09")),]$Index + 1

## Combine and sort
combined <- rbind(is.09, not.09)
combined <- combined[order(combined$Index),-4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...