在R中使用grepl省略字符串中的数字[重复]

问题描述 投票:1回答:1

我正在使用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函数进行处理?只是使用很多边界标记?

r string digits grepl
1个回答
1
投票

您可以使用边界标记(\\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) 
© www.soinside.com 2019 - 2024. All rights reserved.