#r #group-by
#r #группировать по
Вопрос:
У меня есть следующие данные
pt_id <- c(1,1,1,1,1,2,2,2,3,3,3,3,3,4,4,4,4)
visit_id <- c(11,12,13,14,15,21,22,23,31,32,33,34,35,41,42,43,44)
visit <- c(2019, 2019, 2019, 2019, 2020, 2019, 2019, 2020, 2019, 2019, 2019, 2019, 2020, 2019, 2020, 2020, 2020)
mydata <- data.frame(pt_id, visit_id, visit)
mydata
Мне был предоставлен только год для переменной ‘visit’, однако он был упорядочен от самого старого к самому новому для каждого ‘pt_id’. Я хочу создать новый столбец, в котором строки ранжируются в порядке убывания, сгруппированные по ‘pt_id’.
Желаемый результат:
pt_id visit_id visit Row_rank
1 1 11 2019 5
2 1 12 2019 4
3 1 13 2019 3
4 1 14 2019 2
5 1 15 2020 1
6 2 21 2019 3
7 2 22 2019 2
8 2 23 2020 1
9 3 31 2019 5
10 3 32 2019 4
11 3 33 2019 3
12 3 34 2019 2
13 3 35 2020 1
14 4 41 2019 4
15 4 42 2020 3
16 4 43 2020 2
17 4 44 2020 1
Спасибо!
Комментарии:
1. @Eric Krantz Я отредактировал, чтобы добавить желаемый результат.
Ответ №1:
Я буду использовать visit_id
для новой переменной, вместо order
, поскольку order
это функция в базе R.
mydata_lstvst <- mydata %>%
arrange(pt_id, visit, .by_group = TRUE) %>%
group_by(pt_id) %>%
mutate(order = n() - row_number() 1) %>%
ungroup() %>%
arrange(pt_id, visit, desc(order)) %>%
filter(order == 1)
mydata_lstvst
РЕДАКТИРОВАТЬ: обновлено для адресного комментария (фильтр по visit_id == 1).
Комментарии:
1. Спасибо! Сейчас я пытаюсь закодировать группировку данных по ‘pt_id’ для ‘visit_n’ со значением 1. Я не могу записать желаемый результат в комментарии. Дайте мне знать, если вы можете закодировать для этого.
2. Добавьте
%>% filter(order == 1)
в конец этого кода.3. Получение этой ошибки
Error in order == 1 : comparison (1) is possible only for atomic and list types
4. Итак, я сделал подмножество для visit_n со значением 1 🙂
mydata_lstvst_1 <- subset(mydata_lstvst, visit_n == 1)
Большое спасибо!5. Ах, проблема заключалась в том, что я использовал
order
для имени переменной, а вы использовали подоконникvisit_id
.order
является функцией в базе R. Это будет работать, но должно быть согласовано во всем (order
должно быть переменной в df, иначе R пытается выполнить фильтрацию по имени функции).