包含变量的子集数据框

时间:2017-09-19 18:20:03

标签: r

我有一系列事件和序列。如果在序列中的某处包含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

2 个答案:

答案 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)