首页 > 解决方案 > r 基于唯一 id 的字符变量的子集

问题描述

我正在尝试根据“类别”变量对数据进行子集化。更具体地说,该类别有两个级别:a 和 b。示例数据如下所示:

    id <- c(1,2,2,2,1,1,2,2,1,2)
    category <- c("a", "b", "a", "a", "b", "a","a", "b","a","a")

    data <- data.frame("id"=id, "category"=category)
    > data
   id category
1   1        a
2   2        b
3   2        a
4   2        a
5   1        b
6   1        a
7   2        a
8   2        b
9   1        a
10  2        a

我想获得在类别变量中只有超过 3 个 a 或 b 计数的 id 。我先看表数,表可能如下所示:(这部分不一定打印)

      a   b
1     3   1
2     4   2

然后选择与我的标准匹配的 id 。

      a   b

2     4   2

提前致谢!

标签: rsubset

解决方案


一种dplyr可能是:

data %>%
 count(id, category) %>%
 group_by(id) %>%
 filter(n_distinct(category) == 2 & any(n > 3))

     id category     n
  <dbl> <fct>    <int>
1     2 a            4
2     2 b            2

如果您想要精确的输出,使用dplyrand tidyr,您可以执行以下操作:

data %>%
 count(id, category) %>%
 group_by(id) %>%
 filter(n_distinct(category) == 2 & any(n > 3)) %>%
 spread(category, n)

     id     a     b
  <dbl> <int> <int>
1     2     4     2

推荐阅读