Неверный алфавитный порядок значений столбцов - PullRequest
0 голосов
/ 22 мая 2019

У меня есть датафрейм ниже:

AS<-c("Composite", "DGIdb", "DrugBank", "DrugCentral_Human",
      "Repurposing", "LINCS_Data_Portal","TargetCentral")
ASe<-c("Composite", "DGIdb", "DrugBank", "DrugCentral (Human)",
       "Drug Repurposing Hub", "LINCS Data Portal","TargetCentral")
d<-data.frame(AS,ASe)

и я пытаюсь упорядочить его в алфавитном порядке на основе столбца ASe

d[order(d$ASe),]

Результат, который я получаю:

 AS                  ASe
1         Composite            Composite
2             DGIdb                DGIdb
5       Repurposing Drug Repurposing Hub
3          DrugBank             DrugBank
4 DrugCentral_Human  DrugCentral (Human)
6 LINCS_Data_Portal    LINCS Data Portal
7     TargetCentral        TargetCentral

но я думаю, что DrugBank и DrugCentral (Human) должны быть до Drug Repurposing Hub, так как буквы B и C идут перед буквой R. Чего мне не хватает?

1 Ответ

4 голосов
/ 22 мая 2019

Как уже упоминалось в комментарии, проблема в том, что столбцы в вашем фрейме данных - это не символы, а факторы.В большинстве случаев удобнее работать с персонажами.В этом случае вы можете использовать stringsAsFactors = FALSE внутри data.frame(...).Затем вы можете заказать по второму столбцу:

d2 <- data.frame(AS,ASe, stringsAsFactors =FALSE)
d2[order(d2$ASe),]
                 AS                  ASe
1         Composite            Composite
2             DGIdb                DGIdb
5       Repurposing Drug Repurposing Hub
3          DrugBank             DrugBank
4 DrugCentral_Human  DrugCentral (Human)
6 LINCS_Data_Portal    LINCS Data Portal
7     TargetCentral        TargetCentral

Как видите, второй столбец ASe находится в правильном алфавитном порядке.Пробел (т.е. " ") стоит перед каждой буквой.Поэтому Drug Repurposing Hub предшествует DrugBank.

Если вы настаиваете на том, чтобы оставить пробел последним, вы можете использовать обходной путь, подобный этому:

d2[order(gsub(" ", "z", d2$ASe)),]
                 AS                  ASe
1         Composite            Composite
2             DGIdb                DGIdb
3          DrugBank             DrugBank
4 DrugCentral_Human  DrugCentral (Human)
5       Repurposing Drug Repurposing Hub
6 LINCS_Data_Portal    LINCS Data Portal
7     TargetCentral        TargetCentral

РЕДАКТИРОВАТЬ: Решение, предложенное Беном Болкером, еще лучше:

d2[order(gsub(" ", "", d2$ASe)),]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...