Р: Как отсортировать по идентификатору, а затем обнаружить разницу в одном и том же идентификаторе? - PullRequest
1 голос
/ 18 января 2020

У меня есть набор данных, который содержит несколько идентификаторов и столбец даты выборки, например

dataframe <- data.frame(ID=c("ID1","ID2","ID3","ID4", "ID2", "ID2", "ID3","ID4", "ID5","ID1"), 
                    sample_date=c(1991-05-23, 1991-05-24,1991-05-24, 1991-05-26,1991-05-27,1991-05-28,1991-05-30,1991-05-31, 1991-06-03, 1991-06-03), 
                    sex =c(1,2,1,2,2,2,1,2,1,1), and_so_om =c(1))

, а затем я хочу отсортировать по одному и тому же идентификатору и определить, имеет ли тот же идентификатор очень близкое значение sample_date (например, в течение 3 дней ).

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

outcome <- dataframe %>% select(ID,sample_date) %>% count(ID,sample_date)

Отсюда я не знаю, как рассчитать разница дней в sample_date с одним и тем же идентификатором.

Скажите, пожалуйста, как это сделать.

Ответы [ 2 ]

2 голосов
/ 18 января 2020

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

library(dplyr)

n <- 3
dataframe %>%
  mutate(sample_date = as.Date(sample_date)) %>%
  arrange(ID, sample_date) %>%
  group_by(ID) %>%
  summarise(is_closest = any(diff(sample_date) <= n))

, что дает

#  ID   is_close
#  <fct> <lgl>     
#1 ID1   FALSE     
#2 ID2   TRUE      
#3 ID3   FALSE     
#4 ID4   FALSE     
#5 ID5   FALSE     

Эта проверка для каждого ID из any sample_date в течение n дней, чем предыдущий.

данные

dataframe <- data.frame(ID=c("ID1","ID2","ID3","ID4","ID2","ID2","ID3","ID4",
            "ID5","ID1"), sample_date=c("1991-05-23", "1991-05-24","1991-05-24", 
            "1991-05-26", "1991-05-27","1991-05-28","1991-05-30","1991-05-31", 
            "1991-06-03", "1991-06-03"), sex =c(1,2,1,2,2,2,1,2,1,1), and_so_om = 1)
1 голос
/ 18 января 2020

Я думаю, aggregate из базы R достаточно, чтобы сделать

dfout <- aggregate(sample_date~ID,dataframe,function(x) min(diff(sort(x)),Inf)<=3)

таким, что

> dfout
   ID sample_date
1 ID1       FALSE
2 ID2        TRUE
3 ID3       FALSE
4 ID4       FALSE
5 ID5       FALSE
...