我有一个数据框架的记录数据,一个纵向结构如下:
id event
1 1 registration
2 1 inspection
3 1 inspection
4 1 deregistration
5 2 registration
6 2 inspection
7 2 deregistration
8 2 inspection
9 3 registration
10 3 deregistration
11 3 inspection
12 3 inspection
13 4 registration
14 4 inspection
15 4 inspection
16 4 deregistration我需要降低一个类别之后的水平。本质上,我需要删除event在类别deregistration之后的后续级别。数据框架应该如下所示:
id event
1 1 registration
2 1 inspection
3 1 inspection
4 1 deregistration
5 2 registration
6 2 inspection
7 2 deregistration
8 3 registration
9 3 deregistration
10 4 registration
11 4 inspection
12 4 inspection
13 4 deregistration 这是生成df的de
df = data.frame(id = rep(1:4, each = 4),
event = as.factor(c("registration", "inspection", "inspection", "deregistration",
"registration", "inspection", "deregistration", "inspection",
"registration", "deregistration","inspection", "inspection",
"registration", "inspection", "inspection", "deregistration")))发布于 2017-09-07 09:07:09
使用dplyr和tidyr的解决方案。df2是最后的输出。
library(dplyr)
library(tidyr)
df2 <- df %>%
group_by(id) %>%
mutate(Deregistration = ifelse(event == "deregistration", 1, NA)) %>%
fill(Deregistration, .direction = "up") %>%
drop_na(Deregistration) %>%
select(-Deregistration)
df2
# A tibble: 13 x 2
# Groups: id [4]
id event
<int> <fctr>
1 1 registration
2 1 inspection
3 1 inspection
4 1 deregistration
5 2 registration
6 2 inspection
7 2 deregistration
8 3 registration
9 3 deregistration
10 4 registration
11 4 inspection
12 4 inspection
13 4 deregistrationhttps://stackoverflow.com/questions/46091815
复制相似问题