Кодирование количества посещений на основе дат и присвоение значения в новом столбце R - PullRequest
1 голос
/ 12 апреля 2020

Я относительно новичок в R и пытаюсь создать новый столбец для количества посещений (ie num_visits) на основе дат приема (ie admit_date)

Пример кадра данных приведен ниже и количество посещений должно быть создано на основе столбца admit_date. Даты admit_dat не обязательно выполняются в последовательности.

subject_id     admit_date        num_visits
22             2010-10-20        1
23             2010-10-20        1
24             2010-10-21        1
25             2010-10-21        1
22             2010-12-30        3
22             2010-12-22        2
23             2010-12-25        2
30             2011-01-14        1
31             2011-01-14        1
33             2011-02-05        2
33             2011-01-26        1


Я знаю, что мне нужно сгруппировать subject_id и, возможно, получить счет на основе последовательности дат.

Я застрял после следующих кодов, спасибо за любую форму помощи, спасибо!

df %>% 
  group_by(subject_id) %>%

1 Ответ

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

Мы можем использовать mutate после группировки по 'subject_id'

library(dplyr)
df %>% 
  arrange(subject_id, as.Date(admit_date)) %>% 
  group_by(subject_id) %>% 
  mutate(num_visits = row_number())

или с data.table

library(data.table)
setDT(df)[order(as.IDate(admit_date)), num_visits := rowid(subject_id)][]
#    subject_id admit_date num_visits
# 1:         22 2010-10-20          1
# 2:         23 2010-10-20          1
# 3:         24 2010-10-21          1
# 4:         25 2010-10-21          1
# 5:         22 2010-12-30          3
# 6:         22 2010-12-22          2
# 7:         23 2010-12-25          2
# 8:         30 2011-01-14          1
# 9:         31 2011-01-14          1
#10:         33 2011-02-05          2
#11:         33 2011-01-26          1

data

df <- structure(list(subject_id = c(22L, 23L, 24L, 25L, 22L, 22L, 23L, 
30L, 31L, 33L, 33L), admit_date = c("2010-10-20", "2010-10-20", 
"2010-10-21", "2010-10-21", "2010-12-30", "2010-12-22", "2010-12-25", 
"2011-01-14", "2011-01-14", "2011-02-05", "2011-01-26")), row.names = c(NA, 
-11L), class = "data.frame")
...