r基于字符变量的唯一ID子集

时间:2019-06-06 19:17:44

标签: r subset

我正在尝试根据“类别”变量对数据进行子集化。更具体地说,类别具有两个级别: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

我想获得id,它的类别变量中仅包含3个以上的a或b计数。我先看一张桌子, 表格可能如下所示:(此部分不一定要打印)

      a   b
1     3   1
2     4   2

然后选择与我的条件匹配的id。

      a   b

2     4   2

谢谢!

2 个答案:

答案 0 :(得分:2)

一种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

如果要使用dplyrtidyr获得准确的输出,可以执行以下操作:

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

答案 1 :(得分:2)

如果您只想要ID符合您的条件,则可以使用tablerowSums

names(which(rowSums(table(data) > 3) != 0))
[1] "2"