簡體   English   中英

在日期間隔或 NA 內過濾觀察值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM