r подмножество на основе символьной переменной для уникальных идентификаторов - PullRequest
3 голосов
/ 06 июня 2019

Я пытаюсь разместить данные на основе переменной категории.Более конкретно, категория имеет два уровня: 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 в переменной категории.Сначала я смотрю количество столов. Таблица может выглядеть следующим образом: (эта часть не обязательно печатается)

      a   b
1     3   1
2     4   2

, затем выберите те идентификаторы, которые соответствуют моему критерию.

      a   b

2     4   2

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Если вы просто хотите, чтобы идентификаторы соответствовали вашим критериям, вы можете использовать table и rowSums:

names(which(rowSums(table(data) > 3) != 0))
[1] "2"
2 голосов
/ 06 июня 2019

Одна 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

Если вы хотите точный вывод, с dplyr и 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
...