首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dplyr::filter“未注册tidyselect变量”

dplyr::filter“未注册tidyselect变量”
EN

Stack Overflow用户
提问于 2018-02-04 20:13:35
回答 2查看 9K关注 0票数 6

我正在尝试使用dplyr::filter()函数过滤tibble中的特定行。

这是我的tibble head(raw.tb)的一部分

代码语言:javascript
复制
A tibble: 738 x 4
      geno   ind     X     Y
     <chr> <chr> <int> <int>
 1 san1w16    A1   467   383
 2 san1w16    A1   465   378
 3 san1w16    A1   464   378
 4 san1w16    A1   464   377
 5 san1w16    A1   464   376
 6 san1w16    A1   464   375
 7 san1w16    A1   463   375
 8 san1w16    A1   463   374
 9 san1w16    A1   463   373
10 san1w16    A1   463   372
# ... with 728 more rows

当我问:raw.tb %>% dplyr::filter(ind == contains("A"))

我明白了:Error in filter_impl(.data, quo) : Evaluation error: No tidyselect variables were registered

在我的tibble中,unique(raw.tb$ind)是:

代码语言:javascript
复制
    [1] "A1"  "A10" "A11" "A12" "A2"  "A3"  "A4"  "A5"  "A6"  "A7"  "A8"  "A9"  "B1" 
[14] "B10" "B11" "B12" "B2"  "B3"  "B4"  "B5"  "B6"  "B7"  "B8"  "B9"  "C1"  "C10"
[27] "C11" "C12" "C2"  "C3"  "C4"  "C5"  "C6"  "C7"  "C8"  "C9"  "D1"  "D10" "D11"
[40] "D12" "D2"  "D3"  "D4"  "D5"  "D6"  "D7"  "D8"  "D9"  "E1"  "E10" "E11" "E12"
[53] "E2"  "E3"  "E4"  "E5"  "E6"  "E7"  "E8"  "E9"  "F1"  "F10" "F11" "F12" "F2" 
[66] "F3"  "F4"  "F5"  "F6"  "F7"  "F8"  "F9"  "G1"  "G10" "G11" "G2"  "G3"  "G4" 
[79] "G5"  "G6"  "G7"  "G8"  "G9"  "H1"  "H10" "H11"

我只想使用tidyverse语言提取raw.tb$ind以"A“开头的行。

(我知道如何在base R中做到这一点,但我在这里的目标是使用tidyverse)。

非常感谢您的反馈

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-04 20:24:38

filter需要一个逻辑向量来过滤行。select助手(?select_helpers)函数contains根据某种模式选择数据集的列。为了筛选行,我们可以使用base R中的grepl

代码语言:javascript
复制
raw.tb %>%
   dplyr::filter(grepl("A", ind)) 

或者来自stringrstr_detect ( tidyverse中的一个包

代码语言:javascript
复制
raw.tb %>%
  dplyr::filter(stringr::str_detect(ind, "A"))
票数 9
EN

Stack Overflow用户

发布于 2018-02-04 20:26:30

只需简单地写出akrun's comment,@akrun就可以随时接受这个答案,以防万一。

创建一些数据,

代码语言:javascript
复制
dput(raw.tb) 
raw.tb <- structure(list(geno = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = "san1w16", class = "factor"), ind = structure(c(1L, 
1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 1L), .Label = c("A1", "B1", "C1", 
"D1", "E1"), class = "factor"), X = c(467L, 465L, 464L, 464L, 
464L, 464L, 463L, 463L, 463L, 463L), Y = c(383L, 378L, 378L, 
377L, 376L, 375L, 375L, 374L, 373L, 372L)), .Names = c("geno", 
"ind", "X", "Y"), row.names = c("1", "2", "3", "4", "5", "6", 
"7", "8", "9", "10"), class = c("tbl_df", "tbl", "data.frame"
))

数据,

代码语言:javascript
复制
raw.tb
#> # A tibble: 10 x 4
#>       geno    ind     X     Y
#>  *  <fctr> <fctr> <int> <int>
#>  1 san1w16     A1   467   383
#>  2 san1w16     A1   465   378
#>  3 san1w16     B1   464   378
#>  4 san1w16     B1   464   377
#>  5 san1w16     C1   464   376
#>  6 san1w16     C1   464   375
#>  7 san1w16     D1   463   375
#>  8 san1w16     D1   463   374
#>  9 san1w16     E1   463   373
#> 10 san1w16     A1   463   372

方法#1

代码语言:javascript
复制
raw.tb %>% dplyr::filter(str_detect(ind, "A"))
#> # A tibble: 3 x 4
#>      geno    ind     X     Y
#>    <fctr> <fctr> <int> <int>
#> 1 san1w16     A1   467   383
#> 2 san1w16     A1   465   378
#> 3 san1w16     A1   463   372

方法#1

代码语言:javascript
复制
raw.tb %>% dplyr::filter(grepl("A", ind))
#> # A tibble: 3 x 4
#>      geno    ind     X     Y
#>    <fctr> <fctr> <int> <int>
#> 1 san1w16     A1   467   383
#> 2 san1w16     A1   465   378
#> 3 san1w16     A1   463   372
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48607924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档