【问题标题】:Calling groups of string digits using grepl使用 grepl 调用字符串数字组
【发布时间】:2020-06-11 00:23:13
【问题描述】:

我正在使用 grepl 函数尝试对数据进行排序;所有的行号都是不同的调查对象,“ANI_type”字符串中的每个数字代表不同类型的动物——我需要根据动物类型对它们进行排序。更具体地说,我需要将字符串中的一些数字分组。例如,数字 6,7,8,9,10,11 都需要放在 animals$pock 对象中。我将如何使用 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

预期的输出是上面的列(狗,猫,repamp)......这些很容易做到,因为只有一位;我遇到的麻烦是拆分倍数。

【问题讨论】:

  • 你能添加你的预期输出吗?
  • 预期的输出是上面的列(狗,猫,repamp)......这些很容易做到,因为只有一位;我遇到的麻烦是拆分倍数。
  • 但是它在哪里定义了哪个数字是.what?我的意思是你怎么知道2应该进入cats而1应该是dogs?这些信息在哪里?
  • 哦,我明白你的意思了。所有这些都来自调查数据;我将所有这些信息都保存在单独的电子表格中。

标签: r regex string substring grouping


【解决方案1】:

tidyverse 解决方案可以与来自dplyr 库的mutate()if_else() 以及grepl() 一起使用,例如:

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

在这种情况下,您需要使用管道运算符 | 分隔每个动物的所有不同潜在代码,该运算符在 R 中用作 OR 运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多