gpt4 book ai didi

r - 使用 dplyr 和 stringr 检测多个字符串

转载 作者:行者123 更新时间:2023-12-04 00:04:28 25 4
gpt4 key购买 nike

我正在尝试结合 dplyr 和 stringr 来检测数据帧中的多个模式。我想使用 dplyr,因为我想测试许多不同的列。

以下是一些示例数据:

test.data <- data.frame(item = c("Apple", "Bear", "Orange", "Pear", "Two Apples"))
fruit <- c("Apple", "Orange", "Pear")
test.data
item
1 Apple
2 Bear
3 Orange
4 Pear
5 Two Apples

我想使用的是:
test.data <- test.data %>% mutate(is.fruit = str_detect(item, fruit))

并接收
        item is.fruit
1 Apple 1
2 Bear 0
3 Orange 1
4 Pear 1
5 Two Apples 1

一个非常简单的测试工作
> str_detect("Apple", fruit)
[1] TRUE FALSE FALSE
> str_detect("Bear", fruit)
[1] FALSE FALSE FALSE

但即使没有 dplyr,我也无法让它在数据框的列上工作:
> test.data$is.fruit <- str_detect(test.data$item, fruit)
Error in check_pattern(pattern, string) :
Lengths of string and pattern not compatible

有谁知道如何做到这一点?

最佳答案

str_detect只接受长度为 1 的模式。使用 paste(..., collapse = '|') 将其转换为一个正则表达式或使用 any :

sapply(test.data$item, function(x) any(sapply(fruit, str_detect, string = x)))
# Apple Bear Orange Pear Two Apples
# TRUE FALSE TRUE TRUE TRUE

str_detect(test.data$item, paste(fruit, collapse = '|'))
# [1] TRUE FALSE TRUE TRUE TRUE

关于r - 使用 dplyr 和 stringr 检测多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com