簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM