Вызов групп строковых цифр с использованием grepl - PullRequest
0 голосов
/ 27 февраля 2020

Я использую функцию grepl, чтобы попытаться отсортировать данные; все номера строк - разные респонденты, и каждое число в строке «ANI_type» представляет различный тип животного - мне нужно отсортировать их в зависимости от типа животного. Более конкретно, мне нужно сгруппировать некоторые цифры в строках по категориям. Например, цифры 6,7,8,9,10,11 все должны быть помещены в объект животных $ pock. Как бы я go об этом, используя функцию grep?

> animals$dogs <- as.numeric(grepl("\\b1\\b", animals$ANI_type))
> animals
                                                    ANI_type dogs cats repamp
1                              1,2,5,12,13,14,15,16,18,19,27    1    1      0
2                                                          2    0    1      0
3                                             20,21,22,23,26    0    0      0
4                                                20,21,22,23    0    0      0
5                                                         13    0    0      0
6                                                          2    0    1      0
7                                                   20,21,22    0    0      0
8                                                20,21,22,23    0    0      0
9                                                   20,21,22    0    0      0
10                                             5,20,21,22,27    0    0      0
11                                              1,2,20,21,22    1    1      0
12                                       5,18,20,21,22,23,26    0    0      0
13                                                     20,21    0    0      0
14                                                        21    0    0      0
15                                                     20,21    0    0      0
16                                                  20,21,26    0    0      0
17                                                         2    0    1      0
18                                                       1,2    1    1      0
19                                                         2    0    1      0
20                                                       3,4    0    0      1

Ожидаемый результат - столбцы (dog, cat, repamp) выше ... это было легко сделать, так как есть только одна цифра; у меня проблемы с разделением кратных.

1 Ответ

0 голосов
/ 27 февраля 2020

Решение tidyverse можно использовать с mutate() и if_else() из библиотеки dplyr и grepl(), например:

animals <- animals %>%
  mutate(dogs = if_else(grepl("\\b1\\b|\\b22\\b", ANI_TYPE),
         cats = if_else(grepl("\\b2\\b|\\b31\\b", ANI_TYPE))

В этом случае вам хочу разделить все различные потенциальные коды для каждого животного, используя оператор трубы |, который действует как оператор OR в R.

...