基于条件的组内日期差异

时间:2017-11-23 11:17:22

标签: r dplyr tidyverse

我有以下数据。 df是我的出发点。 df2是我想要实现的目标。

df

    "ID"    "event" "time"       "group"  
    1        FALSE   1990-01-01   1
    2        FALSE   1990-01-02   1
    3        FALSE   1990-01-03   1
    4        TRUE    1990-01-04   1
    5        FALSE   1990-01-02   2
    6        TRUE    1990-01-03   2
    7        FALSE   1990-01-03   3

df2(我需要的)

    "ID"    "event" "time"       "group"  distance
    1        FALSE   1990-01-01   1       3
    2        FALSE   1990-01-02   1       2
    3        FALSE   1990-01-03   1       1 
    4        TRUE    1990-01-04   1       0 
    5        FALSE   1990-01-02   2       1
    6        TRUE    1990-01-03   2       0
    7        FALSE   1990-01-03   3       NA

我需要组内任何观察与满足event = TRUE条件的观察之间的日期差异(距离列)。如果组中没有发生事件,则应使用NA代替距离指示器。

1 个答案:

答案 0 :(得分:1)

您只能使用// Working Snippet with int? casting int? valueVariable = temp!=null && temp.Count > 0 ? (int?) temp[0] : null ; df的行来获取数据框。然后将该较小的数据框与df$event = TRUE合并以获得更大的df,其他列merged_df告诉您该组上次merged_df$time.y次发生的日期:

event=TRUE

数据:

merged_df <- merge(x = df, y = df[df$event == TRUE, ], 
                  by = "group", all.x = TRUE)
df$distance <- ( merged_df$time.y - df$time )
df
#  ID event       time group distance
#1  1 FALSE 1990-01-01     1   3 days
#2  2 FALSE 1990-01-02     1   2 days
#3  3 FALSE 1990-01-03     1   1 days
#4  4  TRUE 1990-01-04     1   0 days
#5  5 FALSE 1990-01-02     2   1 days
#6  6  TRUE 1990-01-03     2   0 days
#7  7 FALSE 1990-01-03     3  NA days