gpt4 book ai didi

r - 使用 stringr 的 str_detect() 过滤字符向量的行

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

我正在尝试使用 dplyr::filter()stringr::str_detect 对字符列 a 进行子集化>magrittr - 使用正则表达式捕获两位或更多数字的管道。

这似乎只适用于数字列,并且仅在使用 $- 运算符直接访问该列时才有效:

library(tidyverse)

# Create example data:
test_num <- tibble(
a = c(1:3, 22:24))
test_num
#> # A tibble: 6 x 1
#> a
#> <int>
#> 1 1
#> 2 2
#> 3 3
#> 4 22
#> 5 23
#> 6 24

test_char <- tibble(
a = as.character(c(1:3, 22:24)))
test_char
#> # A tibble: 6 x 1
#> a
#> <chr>
#> 1 1
#> 2 2
#> 3 3
#> 4 22
#> 5 23
#> 6 24

# Subsetting numerical columns works:
test_num %>%
dplyr::filter(a, stringr::str_detect(a, "\\d{2,}"))
#> # A tibble: 3 x 1
#> a
#> <int>
#> 1 22
#> 2 23
#> 3 24

# Subsetting a character columns does not work:
test_char %>%
dplyr::filter(a, stringr::str_detect(a, "\\d{2,}"))
#> Error in filter_impl(.data, quo): Evaluation error: operations are possible only for numeric, logical or complex types.

# Wheras subsetting by accessing the column
# using the `$` operator works:
test_char$a %>%
stringr::str_detect("\\d{2,}")
#> [1] FALSE FALSE FALSE TRUE TRUE TRUE

test_num$a %>%
stringr::str_detect("\\d{2,}")
#> [1] FALSE FALSE FALSE TRUE TRUE TRUE

关于问题可能是什么以及如何使用 filter() 方法解决这个问题的任何想法?非常感谢您的提前帮助!

最佳答案

只需取出过滤器调用中的第一个 a

代替:

test_char %>%
filter(a, str_detect(a, "2"))

使用:

test_char %>%
filter(str_detect(a, "2"))

应该可以。

过滤器函数中的第一个也是唯一一个参数应该是 str_detect(col, "string")

希望对您有所帮助!

关于r - 使用 stringr 的 str_detect() 过滤字符向量的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52058519/

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