我有一系列事件和序列。如果在序列中的某处包含event = x,我想在单独的表中打印序列。见下表:
Event Sequence
1 a 1
2 a 1
3 x 1
4 a 2
5 a 2
6 a 3
7 a 3
8 x 3
9 a 4
10 a 4
在这种情况下,我想要一个新表,其中只包含Event = x的序列:
Event Sequence
1 a 1
2 a 1
3 x 1
4 a 3
5 a 3
6 x 3
答案 0 :(得分:3)
基础R解决方案:
d[d$Sequence %in% d$Sequence[d$Event == "x"], ]
Event Sequence
1: a 1
2: a 1
3: x 1
4: a 3
5: a 3
6: x 3
data.table解决方案:
library(data.table)
setDT(d)[Sequence %in% Sequence[Event == "x"]]
正如您所看到的,这两种解决方案之间的语法/逻辑非常相似:
event
x
Sequence
Sequence
答案 1 :(得分:1)
我们可以使用dplyr
对数据进行分组,并使用其中的任何“x”过滤序列。
library(dplyr)
df2 <- df %>%
group_by(Sequence) %>%
filter(any(Event %in% "x")) %>%
ungroup()
df2
# A tibble: 6 x 2
Event Sequence
<chr> <int>
1 a 1
2 a 1
3 x 1
4 a 3
5 a 3
6 x 3
数据强>
df <- read.table(text = " Event Sequence
1 a 1
2 a 1
3 x 1
4 a 2
5 a 2
6 a 3
7 a 3
8 x 3
9 a 4
10 a 4",
header = TRUE, stringsAsFactors = FALSE)