包括变量的子集数据框架



我有事件和序列的列表。如果事件= 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
  • event
  • 提取他们的Sequence
  • 根据指定的Sequence
  • 的子集表

我们可以使用 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)

最新更新