R - 将间隔时间重新编码为实际、平均和替代变量值

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

上下文。

interval_hrs 变量中每组的最后一个间隔(pid、medname、date)将始终 == 24,因为无法计算间隔。

我正在尝试编写以下代码:

1/。如果每组只有一行(pid、medname、date),则 interval_hrs == 24。发生这种情况时,freqcount 列中的值将用于 new_vars 变量(在所需输出中以 * 突出显示)。

2/。如果该组有多于一行,那么我想对组中的行使用 interval_hrs 的平均值,而不是 interval_hrs == 24(每组的最后一个间隔)(在所需的 (mean) 中突出显示)输出)。

3/。对于剩余的行,我想对 interval_hrs 不等于 24 的行使用实际的 interval_hrs 值。

4/。我希望将新值记录在 new_vars 列中。

虚拟数据集。

        pid         medname         date                freqcount   interval_hrs                
        <chr>       <chr>           <dttm>                   <int>          <dbl>                              
 1      A           Drug1           2022-01-01 04:00:00         9           8                     
 2      A           Drug1           2022-01-01 12:00:00         1           3                    
 3      A           Drug1           2022-01-01 17:00:00         4           24                    
 4      A           Drug1           2022-01-02 19:00:00         9           24                    
 5      A           Drug2           2022-01-01 09:00:00         1           24                    
 6      A           Drug2           2022-01-02 13:00:00         7           1                     
 7      A           Drug2           2022-01-02 11:00:00         8           7                    
 8      A           Drug2           2022-01-02 18:00:00         3           24                   
 9      B           Drug1           2022-01-01 10:00:00         2           2                     
10      B           Drug1           2022-01-01 12:00:00         6           24                    
11      B           Drug1           2022-01-02 14:00:00         7           7                     
12      B           Drug1           2022-01-02 21:00:00         2           24   
    

期望的输出

        pid         medname     date                freqcount   interval_hrs new_var
        <chr>       <chr>       <dttm>                  <int>       <dbl>       <dbl>
 1      A           Drug1       2022-01-01 04:00:00       9         8           8   
 2      A           Drug1       2022-01-01 12:00:00       1         3           3   
 3      A           Drug1       2022-01-01 17:00:00       4         24       9.5 (mean)    
 4      A           Drug1       2022-01-02 19:00:00       9         24          9*   
 5      A           Drug2       2022-01-01 09:00:00       1         24          1*   
 6      A           Drug2       2022-01-02 10:00:00       7         1           1   
 7      A           Drug2       2022-01-02 11:00:00       8         7           7   
 8      A           Drug2       2022-01-02 18:00:00       3         24        4 (mean)   
 9      B           Drug1       2022-01-01 10:00:00       2         2           2   
10      B           Drug1       2022-01-01 12:00:00       6         24        2 (mean)   
11      B           Drug1       2022-01-02 14:00:00       7         7           7   
12      B           Drug1       2022-01-02 21:00:00       2         24        7 (mean)


我试过的代码

df1 <- df %>% group_by(pid, medname, date) %>%
mutate(new_var = ifelse(interval_hrs == 24, mean(interval_hrs, na.rm = TRUE), interval_hrs)) %>%
ungroup() %>% mutate(new_var = round(new_var, 2))

head(df1, 10)

此代码返回一个与 interval_hrs 具有相同值的 new_var。

r databricks
© www.soinside.com 2019 - 2024. All rights reserved.