上下文。
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。