在 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)
我正在使用 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)