r语言 - 子集,如果包含按特定顺序排列的多个变量



在我的数据帧中,我有两列感兴趣的列:idname - 我的目标是只保留id的记录,其中id name有多个值 name中的最终值是"B"。

示例数据如下所示:

> test
   id name
1   1    A
2   2    A
3   3    A
4   4    A
5   5    A
6   6    A
7   7    A
8   2    B
9   1    B
10  2    A

输出将如下所示:

> output
   id name
1   1    A
9   1    B

如何过滤以在 R 中获取这些行? 我知道您可以使用 %in% 运算符按具有多个变量的变量进行过滤,但不确定如何添加"B"必须是最后一条记录的条件。 我不反对使用像dplyr这样的包,但 base R 中的解决方案将是理想的。 有什么建议吗?

下面是示例数据:

> dput(test)
structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 2, 1, 2), name = c("A", 
"A", "A", "A", "A", "A", "A", "B", "B", "A")), .Names = c("id", 
"name"), row.names = c(NA, -10L), class = "data.frame")

使用 dplyr

test %>% 
 group_by(id) %>% 
 filter(n_distinct(name) > 1 & last(name) == 'B')
#Source: local data frame [2 x 2]
#Groups: id [1]
# A tibble: 2 x 2
#     id  name
#  <dbl> <chr>
#1     1     A
#2     1     B

data.table

library(data.table)
setDT(test)[, .SD[length(unique(name)) >= 2 & name[.N] == "B"],by = .(id)]
#   id name
#1:  1    A
#2:  1    B

最新更新