R:如何按ID排序,然后检测相同ID内的差异?

问题描述 投票:0回答:1

我有一个包含几个ID和样本日期列的数据集,例如

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))

然后,我想按相同的ID进行排序,并检测相同的ID是否具有非常接近的sample_date(例如3天内)。

首先,我尝试按ID对数据帧进行排序,然后得到以下结果,

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

从这里开始,我不知道如何计算同一ID中sample_date的天数差。

请告诉我怎么做。

r sorting date difference id
1个回答
0
投票

也许您可以尝试

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)
© www.soinside.com 2019 - 2024. All rights reserved.