【发布时间】:2020-09-22 16:23:27
【问题描述】:
我有一个包含 ID、日期和观察值的数据框,我想找到每个 ID 连续两天没有观察到的第一次出现。
示例数据框:
df <- data.frame(ID = c(1,1,1,2,2,2), Date = c(1,2,4,2,3,6), Observation = c(1,1,2,1,2,4) )
想要的结果:
ID Date
1 5
2 4
虽然我可以让它与一些脏代码一起工作,但这很尴尬,我希望有一个更通用的解决方案。
我的代码:
require(dplyr)
dftemp <- merge(distinct(df, ID), data.frame(Date = c(1:100)))
#Date in the real data frame is always between 1~90, so I choose 100. Probably not true for other data frames.
dftemp <- left_join(dftemp, df)
dftemp$marker <- is.na(dftemp$Observation)
dftemp <- arrange(dftemp, ID, Date)
dftemp$marker2 <- dftemp$marker + c(dftemp$marker[-1], 0) #Shift by 1 row, then add up.
dftemp %>% group_by(ID) %>% filter( marker2 == 2) %>% summarize(Date = min(Date)) %>% as.data.frame
【问题讨论】:
标签: r