как ранжировать уникальные значения в R данных - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть следующий фрейм данных в R

 ID    Date     
 1     01-01-2018
 2     02-01-2018
 3     03-01-2018
 4     03-01-2018
 5     03-01-2018
 6     04-01-2018
 7     04-01-2018

Мой желаемый фрейм данных

 ID    Date          Rank
 1     01-01-2018     1
 2     02-01-2018     2
 3     03-01-2018     3
 4     03-01-2018     3
 5     03-01-2018     3
 6     04-01-2018     4
 7     04-01-2018     4

Ранг должен меняться, когда он встречает уникальные даты, в противном случае ранг должен быть таким же. Как я могу это сделатьв R?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Пакет data.table предлагает откровенный (быстрый рейтинг), который намного быстрее, чем рейтинг. Фрэнк также предлагает дополнительный метод tie.tod, называемый «плотный», и это именно то, что вам нужно.

library(data.table)
A <- data.table("ID" = c(1,2,3,4,5,6,7),
                "Date" = c("01-01-2018",
                           "02-01-2018",
                           "03-01-2018",
                           "03-01-2018",
                           "03-01-2018",
                           "04-01-2018",
                           "04-01-2018"))

A[, rank := frank(Date, ties.method ="dense")]

> A
   ID       Date rank
1:  1 01-01-2018    1
2:  2 02-01-2018    2
3:  3 03-01-2018    3
4:  4 03-01-2018    3
5:  5 03-01-2018    3
6:  6 04-01-2018    4
7:  7 04-01-2018    4

Вы также можете использовать функцию build it .GRP (count group) в сочетании с «by»:

A[, rank := .GRP, by = Date]

Результат точно такой же, как указано выше.

0 голосов
/ 25 апреля 2018

Это можно сделать с помощью match из base R

df1$Rank <- with(df1, match(Date, unique(Date)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...