
[英]How to obtain the mean between values locate on the previous and next row in R?
[英]R how to obtain the mean of previous values depending on a second column with data in long format
我在這里准備了一個帶有數據集示例的可重現示例:
patient <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
month <- rep (1:10, 2)
fev1 <- c(58, NA, NA, NA, 57, NA, NA, NA, NA, 60, NA, NA, NA, NA, 32, NA, NA, NA, NA, 40)
adherence <- c (30, 32, 34, 36, 34, 32, 30, 34, 32, 36, 70, 65, 75, 70, 70, 55, 50, 65, 70, 70)
data <- tibble(patient, month, fev1, adherence)
data
我想獲得第 5 列,稱為平均依從性,對於每個非 NA 的 fev1 值,它將提供自上一個 fev1 值以來先前值的平均依從性,包括與前一個 fev1 值對應的依從性值,和不包括與當前 fev1 值對應的依從性值,以及每個患者 id 的值。
例如,對於患者 1,在第 5 個月,對於 fev1 = 57,它將計算 (30, 32, 34, 36) 的平均值; 然后,對於 fev1 = 60,它將計算 (34, 32, 30, 34, 32) 的平均值
非常感謝您的幫助
我們可以根據 fev1 中的 NA 值創建一個分組變量,然后按組獲取mean
library(dplyr)
data %>%
group_by(patient) %>%
mutate(lagadher = lag(adherence),
grp = lag(cumsum(!is.na(fev1)))) %>%
group_by(grp, .add = TRUE) %>%
mutate(Mean_adhere = mean(lagadher) * NA^(is.na(fev1))) %>%
ungroup %>%
select(-grp, -lagadher)
-輸出
# A tibble: 20 × 5
patient month fev1 adherence Mean_adhere
<dbl> <int> <dbl> <dbl> <dbl>
1 1 1 58 30 NA
2 1 2 NA 32 NA
3 1 3 NA 34 NA
4 1 4 NA 36 NA
5 1 5 57 34 33
6 1 6 NA 32 NA
7 1 7 NA 30 NA
8 1 8 NA 34 NA
9 1 9 NA 32 NA
10 1 10 60 36 32.4
11 2 1 NA 70 NA
12 2 2 NA 65 NA
13 2 3 NA 75 NA
14 2 4 NA 70 NA
15 2 5 32 70 70
16 2 6 NA 55 NA
17 2 7 NA 50 NA
18 2 8 NA 65 NA
19 2 9 NA 70 NA
20 2 10 40 70 62
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.