在 R 中使用 grepl 省略字符串中的数字

Omitting a digit in a string using grepl in R

我正在使用 grepl 函数尝试对数据进行排序;所有行号都是不同的调查受访者,"ANI_type" 字符串中的每个数字代表不同类型的动物 - 我需要根据动物类型对它们进行排序。例如,“2"s under ANI_type represent cats. I thought I had it figured out with the following, but it's not only including the "2”,但任何包含“2”的数字也是如此。我怎样才能让它工作,以便它只包含“2”? 非常感谢,我对此非常陌生!

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

此外,我需要对字符串中的一些数字进行分类。例如,数字 6,7,8,9,10,11 都需要放在 animals$pock 对象中。我将如何使用 grep 函数来解决这个问题?只是使用很多边界标记?

您可以使用边界标记 (\b):

grepl("\b2\b", animals$ANI_type)

但是,如果不依赖正则表达式,您可能希望构建数据结构,以便每只动物都在自己的行中。您可以为此使用 tidyr::separate_rows()

library(tibble)
library(tidyr)

animals %>%
  rowid_to_column(var = "id") %>%
  separate_rows(ANI_type, sep = ",", convert = TRUE)