使用 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
我有一个大数据集,如下所示:
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