【发布时间】:2016-12-30 17:38:07
【问题描述】:
我是一个 R 菜鸟,并尝试对数据集执行摘要,该数据集总计每个 ID 的事件类型的数量,该 ID 的类型为“B”的事件之间发生的事件。这是一个示例来说明:
id <- c('1', '1', '1', '2', '2', '2', '3', '3', '3', '3')
type <- c('A', 'A', 'B', 'A', 'B', 'C', 'A', 'B', 'C', 'B')
datestamp <- as.Date(c('2016-06-20','2016-07-16','2016-08-14','2016-07-17'
,'2016-07-18','2016-07-19','2016-07-16','2016-07-19'
, '2016-07-21','2016-08-20'))
df <- data.frame(id, type, datestamp)
产生:
> df
id type datestamp
1 1 A 2016-06-20
2 1 A 2016-07-16
3 1 B 2016-08-14
4 2 A 2016-07-17
5 2 B 2016-07-18
6 2 C 2016-07-19
7 3 A 2016-07-16
8 3 B 2016-07-19
9 3 C 2016-07-21
10 3 B 2016-08-20
每当发生事件“B”时,我想知道在该 B 事件之前但在该 ID 的任何其他 B 事件之后发生的每种事件类型的数量。 我想最终得到一张这样的表格:
id type B_instance count
1 1 A 1 2
2 2 A 1 1
3 3 A 1 1
4 3 C 2 1
在研究中,这个问题最接近:summarizing a field based on the value of another field in dplyr
我一直在努力做到这一点:
df2 <- df %>%
group_by(id, type) %>%
summarize(count = count(id[which(datestamp < datestamp[type =='B'])])) %>%
filter(type != 'B')
但它会出错(此外,即使它有效,它也不会考虑同一 ID 中的 2 个“B”事件,例如 id=3)
【问题讨论】: