Присвойте номер каждой уникальной дате в R - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть столбец со значениями даты. Я пытаюсь пометить самую последнюю дату как 1, а самую последнюю - как 2. и т. Д.
Здесь я использую dplyr для достижения этой цели, но после выполнения кода я получаю постоянный результат как '1 '

date = c("2020-01-20","2020-01-21","2020-01-22","2020-01-23","2020-01-24")
df = as.data.frame(date)
df$date= as.Date(df$date)

max_date=max(df$date)
min_date =min(df$date)

ll <- seq(min_date, max_date, by = "day")

df$day_no = case_when(
  ( max(df$date) ==as.Date(ll[5])) ~ as.integer(1),
  ( max(df$date)-1 ==as.Date(ll[4])) ~ as.integer(2),
  ( max(df$date)-2 ==as.Date(ll[3])) ~ as.integer(3),
  ( max(df$date)-3 ==as.Date(ll[2])) ~ as.integer(4),
  ( max(df$date)-4 ==as.Date(ll[1])) ~ as.integer(5),
  TRUE ~ as.integer(NA)
  ) 

Вывод, который я ищу, следующий:

day_no = c(5,4,3,2,1)
day_no = as.integer(day_no)
df = data.frame(date,day_no)

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 23 апреля 2020

Другой способ - использовать xxx_rank в dplyr или rank в базе r.

df %>% 
  mutate(day_no = dense_rank(desc(date)))

, просто выберите тот, который подходит для вашего набора данных.

1 голос
/ 23 апреля 2020

В базе R используйте rank:

df$daterank <- rank(df$date)
df
        date daterank
1 2020-01-20        1
2 2020-01-21        2
3 2020-01-22        3
4 2020-01-23        4
5 2020-01-24        5

В качестве альтернативы, если вам требуется обратное ранжирование, добавьте - и конвертируйте даты в цифры c:

df$daterank <- rank(- as.numeric(df$date))
df
        date daterank
1 2020-01-20        5
2 2020-01-21        4
3 2020-01-22        3
4 2020-01-23        2
5 2020-01-24        1
0 голосов
/ 23 апреля 2020

Чтобы решить проблему, преобразуйте даты в их целочисленное представление, затем вычтите максимум. Для вычитания 1L корректируются значения ожидаемого выхода. Затем преобразуйте в абсолютные значения.

df$day_no <- abs(as.integer(df$date) - max(as.integer(df$date)) - 1L)
df
#        date day_no
#1 2020-01-20      5
#2 2020-01-21      4
#3 2020-01-22      3
#4 2020-01-23      2
#5 2020-01-24      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...