很抱歉,如果之前有人问过这个问题,但我在这里找不到解决方案。在 R 中,我想在给定条件的最早数据点上按 ID 过滤我的数据集,如果没有则在最新数据点上过滤。
因此,根据这个数据集查看个人是否做出了回应:
ID response follow_up_date
P1 0 2001-01-01
P1 0 2002-01-01
P1 0 2003-01-01
P2 0 2003-01-01
P2 1 2004-01-01
P3 1 2001-01-01
P3 1 2003-01-01
P3 1 2004-01-01
我想提取每个 ID 的行,其中包含有人响应的最早日期 (response=1),如果他们尚未响应 (response = 0),我想提取最后一行 -更新。所以输出应该是:
ID response follow_up_date
P1 0 2003-01-01
P2 1 2004-01-01
P3 1 2001-01-01
有谁知道我将如何实现这一目标?我假设有一种使用 dplyr
或 data.table
的方法,但我还没有完全弄明白。
创建数据框的代码在这里:
ID<-c("P1","P1","P1","P2","P2","P3","P3","P3")
response<-c(0,0,0,0,1,1,1,1)
follow_up_date<-as.Date(c("2001-01-01","2002-01-01","2003-01-01","2003-01-01","2004-01-01","2001-01-01","2003-01-01","2004-01-01"))
df<-data.frame(ID,response,follow_up_date)
最佳答案
df %>%
group_by(ID) %>% # group by ID
mutate(index = case_when(response == 1 ~ which.min(follow_up_date), # get earliest date if response == 0
response == 0 ~ which.max(follow_up_date))) %>% # get latest date if reponse == 1
slice(first(index)) %>% # get first occurance of index
select(-index)
或使用data.table
library(data.table)
setDT(df)
df[df[,.I[ifelse(response[1] == 0,which.max(follow_up_date),which.min(follow_up_date))],by = ID]$V1]
关于r - 在 R 中,如果满足条件(等于 1),是否可以提取每个 ID 最早日期的行,如果不满足条件,则提取最晚日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64572142/