R语言 一段时间内的平均值

cdmah0mi  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(182)

这是一个比较棘手的问题,我有一个数据集,其中包含N个个体T年的变量数据,我有一个哑元(new_regime),如果一个新的制度已经开始,它的值为1,否则为0。

individual|year|new_regime|variable
------------------------------------
   1        1       1         0.5
   1        2       0         0.78
   1        3       0         0.9
   1        4       0         0.76
   1        5       1         0.86

我想要的是能够计算变量的平均值,直到下一个新的状态实现,本质上我想创建这样的东西:

individual|year|new_regime|variable|mean_variable|
--------------------------------------------------
   1        1       1         0.5        0.735
   1        2       0         0.78       0.735
   1        3       0         0.9        0.735
   1        4       0         0.76       0.735
   1        5       1         0.86

我还应该添加一些变量的值为NA,这样:

individual|year|new_regime|variable|
------------------------------------
   2        1       1         0.5        
   2        2       0         NA       
   2        3       0         0.9        
   2        4       0         0.76       
   2        5       1         0.86

但在这种情况下,我仍然希望计算出现有观测值的平均值,即:

individual|year|new_regime|variable|mean_variable|
-------------------------------------------------
   2        1       1         0.5        0.72     
   2        2       0         NA         0.72  
   2        3       0         0.9        0.72     
   2        4       0         0.76       0.72

我甚至不知道从哪里开始,所以任何帮助将不胜感激。

gmxoilav

gmxoilav1#

您可以尝试:

library(dplyr)

df %>%
  group_by(individual) %>%
  mutate(regime_idx = cumsum(new_regime)) %>%
  group_by(individual, regime_idx) %>% # or group_by(regime_idx, .add = TRUE)
  mutate(mean_variable = case_when(regime_idx == 1L ~ mean(variable, na.rm = TRUE))) %>% # or just mutate(mean_variable = mean(variable, na.rm = TRUE)) if you want output for all regimes
  ungroup %>%
  select(-regime_idx)

输出:

# A tibble: 10 × 5
   individual  year new_regime variable mean_variable
        <int> <int>      <int>    <dbl>         <dbl>
 1          1     1          1     0.5          0.735
 2          1     2          0     0.78         0.735
 3          1     3          0     0.9          0.735
 4          1     4          0     0.76         0.735
 5          1     5          1     0.86        NA    
 6          2     1          1     0.5          0.72 
 7          2     2          0    NA            0.72 
 8          2     3          0     0.9          0.72 
 9          2     4          0     0.76         0.72 
10          2     5          1     0.86        NA

相关问题