测试某些变量(不同版本)是否出现在数据中

艾曼

假设我有一个字符向量(向量(A)),该向量在其每个元素中都包含一个字符串(因此,单独的字符串:A1,A2,A3等)。我想将每个字符串与另一个字符串向量向量(B))进行比较,以查看是否存在匹配项。

例如,这意味着当向量Axyz在其第一个元素中具有字符串,而向量Bxyz_blah在任何元素中均具有字符串,我将TRUE在测试A-1是否存在于B中(无论如何)时得到。

vec_a <- c()
vec_b <- c()

vec_a[1] <- "xyz"
set.seed(2020) ; vec_b[sample(1:100, size = 1)] <- "xyz_blah"

grepl(vec_a, vec_b)

## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [27] FALSE  TRUE

但是我的情况恰好更复杂。首先,向量A中有多个字符串,我想测试向量B中是否存在。

vec_a[1] <- "xyz"
vec_a[2] <- "vvtp"
set.seed(2020) 
vec_b[sample(1:100, size = 1)] <- "xyz_blah"
vec_b[sample(1:100, size = 1)] <- "vvtp_blah"

而不是2 TRUEs,而是grepl(vec_a, vec_b)返回allFALSE和错误:

警告消息:在grepl(vec_a,vec_b)中:参数'pattern'的长度> 1,并且仅使用第一个元素

其次,有时我知道向量A中的字符串在向量B中出现时可能带有不同的加法(或“版本”)。例如,向量A可能包含dog_height和/或dog_weight,向量B也可能包含。所以我想指定不仅是“ stem”字符串,还包括潜在的版本,并测试每个字符串是否都出现在向量B中。当我的数据可以具有一个dog_weight或一个weight_dog(但不能同时具有两个)时,情况变得更加复杂,因此我知道dog并且weight必须同时存在于向量B中只有一个字符串,但不是确切的模式。

一个连贯的例子

我有宠物诊所的数据。

  • 列标题具有动物种类和度量类型。
  • 有时,没有任何类型的度量,只有动物。
  • 动物种类和度量类型之间的分隔符不一致(有时是_~-
  • 动物的种类和措施的种类可以互换仓位
library(tibble)

df <- tribble(~dog_weight, ~dog_height, ~cat_weight, ~cat_height, ~hamster, ~`rabbit~weight`, ~parrot_height, ~`weight-guinea_pig`)

因此:

names(df)

[1] "dog_weight"        "dog_height"        "cat_weight"        "cat_height"        "hamster"           "rabbit~weight"     "parrot_height"     "weight-guinea_pig"

现在,假设我要查询数据并查看是否具有:

  • 狗的体重数据
  • 狗的身高数据
  • 豚鼠体重数据
  • 仓鼠的任何数据

一种方法是指定一个带有动物名称和度量类型的函数,以使被调用的函数locate_in_df()具有三个参数:

  • vector_of_animalsc(dog, guinea_pig, hamster);
  • type_of_measure 可以是 c(height, weight, any)
  • 要检查的数据框
animals <- c("dog", "guinea_pig", "hamster")
measures <- c("weight", "height")

locate_in_df(vector_of_animals = animals,
             type_of_measure = measures,
             dataframe = df)

并将返回:

  animal     weight height any  
  <chr>      <lgl>  <lgl>  <lgl>
1 dog        TRUE   TRUE   TRUE 
2 guinea_pig TRUE   FALSE  TRUE 
3 hamster    FALSE  FALSE  TRUE 

另一种方法可以指定动物的媒介和度量类型,并对其进行测试,names(df)以便:

vec_of_query <- c("dog, height", "dog, weight", "guinea_pig, weight", "hamster")

然后grepl()要返回某种类似的东西TRUE TRUE TRUE TRUE它比第一种方法的粒度要小,但仍能提供有用的信息,它可以追溯到本篇文章的开始,讨论向量之间的匹配字符串。问题是,我不知道该如何解决这两个想法。知道如何实现吗?

艾伦·卡梅伦

您可以这样实现locate_in_df

locate_in_df <- function(vector_of_animals, type_of_measure, dataframe) {
   haystack <- names(dataframe)

   vs <- apply(sapply(type_of_measure, function(x) {
     lapply(vector_of_animals, function(y) {
       any(grepl(x, haystack) & grepl(y, haystack))
     })
   }), 2, unlist)
   
   tibble(animals = vector_of_animals, 
          as.data.frame(vs), 
          any = sapply(vector_of_animals, function(x) any(grepl(x, haystack))))
}

这样的

locate_in_df(vector_of_animals = animals,
              type_of_measure = measures,
              dataframe = df)

#> # A tibble: 3 x 4
#>   animals    weight height any  
#>   <chr>      <lgl>  <lgl>  <lgl>
#> 1 dog        TRUE   TRUE   TRUE 
#> 2 guinea_pig TRUE   FALSE  TRUE 
#> 3 hamster    FALSE  FALSE  TRUE 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

iOS版本未出现在testflight beta测试中

来自分类Dev

在控制器测试中创建的域对象不会最终出现在数据库中

来自分类Dev

以编程方式创建的属性出现在数据库中,而不出现在Magento后端中

来自分类Dev

以编程方式创建的属性出现在数据库中,而不出现在Magento后端中

来自分类Dev

SQL 计数出现在数据集中,但变量值可以交换

来自分类Dev

在mongo聚合管道的投影阶段检查元素是否出现在数组中

来自分类Dev

Braintree订阅对象中的最新交易是否出现在数组的顶部或底部?

来自分类Dev

查看一组值是否出现在数组中的有效方法?

来自分类Dev

如何使一个圆圈仅出现在具有不同颜色的某些div中?

来自分类Dev

BigQuery SQL排除某些值出现在不同列中的行

来自分类Dev

如何防止某些变量出现在python Class对象中?

来自分类Dev

Codeigniter:文件名未出现在数据库中

来自分类Dev

PDO MySQL prepare-> execute INSERT INTO未出现在数据库中

来自分类Dev

当列名“ n”出现在数据框中时,使用`dplyr :: tally`

来自分类Dev

Codeigniter:文件名未出现在数据库中

来自分类Dev

如何使属性的元素不出现在数据合同生成的XML中

来自分类Dev

Web ApI实体框架(代码优先)值未出现在数据库中

来自分类Dev

Firebase 评论未出现在数据库中

来自分类Dev

Ruby-Nils出现在数组中

来自分类Dev

如何检查当前主机是否出现在 ansible 中的变量列表中?

来自分类Dev

R-计算出现在数据框中并分组的列表中单词的总出现次数

来自分类Dev

检查文件的所有行是否都出现在不同的文件中

来自分类Dev

如何只过滤出现在数据集中而不出现在先前数据集中的新数据?

来自分类Dev

某些字体未出现在LibreOffice中

来自分类Dev

Tinymce 按钮未出现在某些页面中

来自分类Dev

禁止显示出现在不同组中的数据,并保留最新日期

来自分类Dev

Arangoimp 声明一切运行正常,但数据没有出现在数据库中

来自分类Dev

Cassandra节点出现在不同的数据中心

来自分类Dev

CKEditor光标未出现在压缩版本中

Related 相关文章

  1. 1

    iOS版本未出现在testflight beta测试中

  2. 2

    在控制器测试中创建的域对象不会最终出现在数据库中

  3. 3

    以编程方式创建的属性出现在数据库中,而不出现在Magento后端中

  4. 4

    以编程方式创建的属性出现在数据库中,而不出现在Magento后端中

  5. 5

    SQL 计数出现在数据集中,但变量值可以交换

  6. 6

    在mongo聚合管道的投影阶段检查元素是否出现在数组中

  7. 7

    Braintree订阅对象中的最新交易是否出现在数组的顶部或底部?

  8. 8

    查看一组值是否出现在数组中的有效方法?

  9. 9

    如何使一个圆圈仅出现在具有不同颜色的某些div中?

  10. 10

    BigQuery SQL排除某些值出现在不同列中的行

  11. 11

    如何防止某些变量出现在python Class对象中?

  12. 12

    Codeigniter:文件名未出现在数据库中

  13. 13

    PDO MySQL prepare-> execute INSERT INTO未出现在数据库中

  14. 14

    当列名“ n”出现在数据框中时,使用`dplyr :: tally`

  15. 15

    Codeigniter:文件名未出现在数据库中

  16. 16

    如何使属性的元素不出现在数据合同生成的XML中

  17. 17

    Web ApI实体框架(代码优先)值未出现在数据库中

  18. 18

    Firebase 评论未出现在数据库中

  19. 19

    Ruby-Nils出现在数组中

  20. 20

    如何检查当前主机是否出现在 ansible 中的变量列表中?

  21. 21

    R-计算出现在数据框中并分组的列表中单词的总出现次数

  22. 22

    检查文件的所有行是否都出现在不同的文件中

  23. 23

    如何只过滤出现在数据集中而不出现在先前数据集中的新数据?

  24. 24

    某些字体未出现在LibreOffice中

  25. 25

    Tinymce 按钮未出现在某些页面中

  26. 26

    禁止显示出现在不同组中的数据,并保留最新日期

  27. 27

    Arangoimp 声明一切运行正常,但数据没有出现在数据库中

  28. 28

    Cassandra节点出现在不同的数据中心

  29. 29

    CKEditor光标未出现在压缩版本中

热门标签

归档