[英]filter observations within date interval or NA
我想檢查某個日期間隔或 NA 的觀察結果,然后創建新變量。 參見示例:
d <- wrapr::build_frame( "ID", "DATE1", "DATE2" | 1 , "2001-03-05" , "2001-01-05" | 2 , "2001-01-02" , "NA" | 3 , "2001-01-02" , "2004-04-01" | 4 , "2012-01-02" , "2012-01-02" )
生成這個:
ID DATE1 DATE2
1 1 2001-03-05 2001-01-05
2 2 2001-01-02 NA
3 3 2001-01-02 2004-04-01
4 4 2012-01-02 2012-01-02
我希望結果是這樣的:
ID DATE1 DATE2 VAR
1 1 2001-03-05 2001-01-05 2001-01-05
2 2 2001-01-02 NA 0
3 3 2001-01-02 2004-04-01 0
4 4 2012-01-02 2012-01-02 2012-01-02
也就是說, DATE1
應該大於或等於DATE2
,但不超過 90 天。
如果這是真的DATE2
應該寫在新列VAR
中。
如果這不正確或DATE2
為 NA,則VAR
應為 0。
我一直在嘗試使用dplyr
,但無法真正弄清楚如何解決它。
d<-d%>%group_by(ID)%>%filter(is.na(DATE2)|((DATE1-DATE2)>0)
d<-d%>%group_by(ID)%>%filter(is.na(DATE2)|((DATE1-DATE2)<90)
最好的,H
使用dplyr
的一種可能解決方案是
library(dplyr)
d %>%
mutate(
DATE1 = as.Date(DATE1),
DATE2 = as.Date(DATE2),
VAR = ifelse(DATE1 >= DATE2 & as.numeric(difftime(DATE1, DATE2, units = "days")) < 90 & !is.na(DATE2), as.character(DATE2), 0)
)
Output
# ID DATE1 DATE2 VAR
# 1 1 2001-03-05 2001-01-05 2001-01-05
# 2 2 2001-01-02 <NA> 0
# 3 3 2001-01-02 2004-04-01 0
# 4 4 2012-01-02 2012-01-02 2012-01-02
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.