Фильтрация записей, которые появляются более одного раза в R

#r #repeat

#r #повторение

Вопрос:

Из следующего набора данных мне нужно количество идентификаторов пациентов с более чем одним посещением.

 pt_id <- c(1,1,1,1,1,2,2,2,3,3,3,3,3,4)
visit <- c(2019, 2019, 2019, 2019, 2020, 2019, 2019, 2020, 2019, 2019, 2019, 2019, 2020, 2019)
mydata <- data.frame(pt_id, visit)
mydata
 

Ответ №1:

дополнительная опция base R

 sum(table(mydata$pt_id) > 1)
#> [1] 3
 

Ответ №2:

С dplyr :

 library(dplyr)
mydata %>%
  group_by(pt_id) %>%
  filter(n() > 1) %>%
  pull(pt_id) %>%
  unique %>%
  length
# [1] 3
 

С помощью base — сохраняйте только дублированные идентификаторы, считайте уникальные значения:

 length(unique(mydata[duplicated(mydata$pt_id), ][["pt_id"]]))
# [1] 3
 

Ответ №3:

Вы можете попробовать это,

 library(dplyr)
mydata%>%group_by(pt_id)%>%mutate(count=ifelse(cumsum(n())>1,1,0))
 

Если count это 1 , то у пациента было более одного посещения и так далее.

Ответ №4:

Другой вариант с count

 library(dplyr)
mydata %>% 
   count(pt_id) %>%
   filter(n > 1) %>% 
   nrow
#[1] 3