Рейтинг по показателям

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Рейтинг по показателям

Сообщение VistaSV30 » 01 окт 2020, 15:10

Добрый день!
Может быть в R есть более эффективный способ поиска индекса элемента?

Задача такая
Дана таблица:

Код: Выделить всё

set.seed(100)
df <- data.frame(Nm=LETTERS[1:5], N1=sample(100:999, 5), N2=sample(100:999, 5))
  Nm  N1  N2
1  A 813 569
2  B 602 615
3  C 457 922
4  D 723 937
5  E 817 197
Надо определить индекс элемента "А" в зависимости от значений в столбцах N1 и N2
Например, по столбцу N1 элемент "А" стоит на 4 месте.

Пока я это решаю так:

Код: Выделить всё

set.seed(100)
df <- data.frame(Nm=LETTERS[1:5], N1=sample(100:999, 5), N2=sample(100:999, 5))

# Рейтинг А по первой колонке
df <- df[order(df$N1),]
which(df$Nm == "A", arr.ind = F) 

# Рейтинг А по второй колонке
df <- df[order(df$N2),]
which(df$Nm == "A", arr.ind = F) 
Может быть есть более эффективный способ?
Спасибо!
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

gamm
Гуру
Сообщения: 4046
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Рейтинг по показателям

Сообщение gamm » 01 окт 2020, 15:27

order(rank(df$N1)+rank(df$N2))

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Рейтинг по показателям

Сообщение VistaSV30 » 01 окт 2020, 15:47

Так правильно?

Код: Выделить всё

# Рейтинг А по первой колонке
rank(df$N1)[which(df$Nm=="A")]
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

gamm
Гуру
Сообщения: 4046
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Рейтинг по показателям

Сообщение gamm » 01 окт 2020, 15:58

Код: Выделить всё

set.seed(100)
df <- data.frame(Nm=LETTERS[1:5], N1=sample(100:999, 5), N2=sample(100:999, 5))
df
df$reiting=order(rank(df$N1)+rank(df$N2))
df

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Рейтинг по показателям

Сообщение VistaSV30 » 01 окт 2020, 16:20

Спасибо большое!
Но мне нужен был рейтинг отдельно по каждому показателю, а не одновременно по двум.

Т.е. должно получится такое сообщение:
- по показателю N1 "А" занимает 4 место;
- по показателю N2 "А" занимает 2 место.

И соответственно код:

Код: Выделить всё

rank(df$N1)[which(df$Nm=="A")]
rank(df$N2)[which(df$Nm=="A")]
Результат получается такой как мне надо.
Можно ли это решение назвать правильным? Или надо как-то по другому делать?
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

gamm
Гуру
Сообщения: 4046
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Рейтинг по показателям

Сообщение gamm » 01 окт 2020, 18:59

VistaSV30 писал(а):
01 окт 2020, 16:20
Но мне нужен был рейтинг отдельно по каждому показателю, а не одновременно по двум.
а написано было другое
Надо определить индекс элемента "А" в зависимости от значений в столбцах N1 и N2

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Рейтинг по показателям

Сообщение VistaSV30 » 02 окт 2020, 12:51

Извиняюсь, неправильно сформулировал.
В выражении "N1 и N2" подразумевалась не конъюнкция а, дизъюнкция :D
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей