我有事件和序列的列表。如果事件= 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
在这种情况下,我想要一个新表,仅包括包括事件= x的序列:
Event Sequence
1 a 1
2 a 1
3 x 1
4 a 3
5 a 3
6 x 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"]]
您可以看到这两个解决方案之间的语法/逻辑非常相似:
- 查找等于
x
的 - 提取他们的
Sequence
- 根据指定的
Sequence
的子集表
event
我们可以使用 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)