我正在使用grepl函数尝试对数据进行排序;所有行号都是不同的调查对象,并且“ ANI_type”字符串中的每个数字代表不同类型的动物-我需要根据动物类型对它们进行排序。例如,ANI_type下的“ 2”代表猫。我以为我可以通过以下方法弄清楚,但它不仅包括“ 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)