使用 group_by 和 dplyr 根据先前的条件计算一个事件的概率

Count the probability of one event based on the previous condition using group_by and dplyr

我有一个大数据集,如下所示:

df <- data.frame(group=c("A","A","A","A","B","B","B","B"), event=c(0,1,1,0,1,1,1,1), time=c(1,2,3,4,1,2,3,4))

  group event time
1     A     0    1
2     A     1    2
3     A     1    3
4     A     0    4
5     B     1    1
6     B     1    2
7     B     1    3
8     B     1    4

我想计算每个组在前一个时间点的事件中看到“1”或“0”的概率。例如,在 A 组中,我们看到当出现“0”时,随后出现“1”的概率为 100%,但当出现“1”时,随后出现的“0”或“1”各有 50% 的概率。在 B 组中,我们看到一个事件占主导地位。当“1”出现时,“1”出现的概率为 100%。

我希望我的数据优先看起来像这样

group  event probability
 A     0-1       100
 A     0-0         0
 A     1-1        50
 A     1-0        50
 B     0-1         0
 B     0-0         0
 B     1-1        100
 B     1-0         0

如有任何帮助或意见,我们将不胜感激。

这行得通吗?

library(dplyr)

df %>% 
  arrange(group, time) %>% 
  group_by(group) %>% 
  mutate(event_next = lead(event)) %>% 
  slice(-n()) %>% 
  count(group, event, event_next) %>% 
  group_by(group, event) %>% 
  mutate(prop = n/sum(n)) %>%
  ungroup()

# # A tibble: 4 x 5
#   group event event_next     n  prop
#   <chr> <dbl>      <dbl> <int> <dbl>
# 1 A         0          1     1   1  
# 2 A         1          0     1   0.5
# 3 A         1          1     1   0.5
# 4 B         1          1     3   1