日期间隔或不适用内的过滤器观察结果

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

我想检查某个日期间隔或不适用的观测值,然后创建新变量。参见示例:

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

r date dplyr tidyr na
1个回答
0
投票

使用dplyrtidyr的一种可能的解决方案是

library(dplyr)
library(tidyr)

d %>% 
  mutate(
    DATE1 = as.Date(DATE1),
    DATE2 = as.Date(DATE2),
    VAR = ifelse(DATE1 >= DATE2 & as.numeric(difftime(DATE1, DATE2, units = "days")) < 90, as.character(DATE2), 0)
  ) %>% 
  replace_na(list(VAR = 0))

输出

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