【问题标题】:filter in dplyr returning error过滤 dplyr 返回错误
【发布时间】:2014-04-19 20:32:27
【问题描述】:

有人知道为什么会这样吗? 我有一个数据框,我正在尝试使用 dplyr 对其进行过滤。

filter(dft, form=="9S")
Error in structure(as.character(x), names = names(x), dim = dim(x), dimnames = dimnames(x)) : 
  'names' attribute [1020] must be the same length as the vector [113]

这是我要考虑的事物的类别:

class(dft$form)
[1] "factor"

所以...不确定问题出在哪里..dplyr 应该是预期因素,我在网上看到很多人使用 dplyr 的 filter 和字符串来做这件事的例子。

这是dft的负责人

   lab type form class     ami dateStarted GE-000 ANSI-000 ANSI-001 ANSI-002 ANSI-003 ANSI-004 ANSI-005 ANSI-006 ANSI-007 ANSI-008 ANSI-009
V3 2078 KV2c  16S   200 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V4 2078 KV2c  16S   200 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V5 2078 KV2c  12S   200 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V6 2078 KV2c   9S    20 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V7 2078 KV2c  36S    20 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V8 2078 KV2c  45S    20 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
   ANSI-010 ANSI-011 ANSI-013 ANSI-014 ANSI-015 ANSI-016 ANSI-017 ANSI-018 ANSI-019 ANSI-020 ANSI-021 ANSI-022 ANSI-023 ANSI-024 ANSI-025
V3     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V4     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V5     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V6     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V7     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
V8     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
   ANSI-025a ANSI-026 ANSI-027 ANSI-028 ANSI-030 ANSI-031 ANSI-032 ANSI-033 ANSI-003a ANSI-034 ANSI-035 ANSI-038 GE-056 GE-070 GE-071 GE-076
V3      <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>      <NA>     <NA>     <NA>     <NA>      1   <NA>   <NA>      0
V4      <NA>        1     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>      <NA>     <NA>     <NA>     <NA>      1   <NA>   <NA>      0
V5      <NA>        1     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>      <NA>     <NA>     <NA>     <NA>      1   <NA>   <NA>      0
V6      <NA>        1     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>      <NA>     <NA>     <NA>     <NA>      1   <NA>   <NA>      0
V7      <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>      <NA>     <NA>     <NA>     <NA>      1   <NA>   <NA>      0
V8      <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>      <NA>     <NA>     <NA>     <NA>      1   <NA>   <NA>      0
   GE-099 GE-102 GE-103 GE-105 GE-108 GE-119 GE-164
V3      1      1   <NA>   <NA>   <NA>   <NA>   <NA>
V4      1      1   <NA>   <NA>   <NA>   <NA>   <NA>
V5      1      1   <NA>   <NA>   <NA>   <NA>   <NA>
V6      1      1   <NA>   <NA>   <NA>   <NA>   <NA>
V7      1      1   <NA>   <NA>   <NA>   <NA>   <NA>
V8      1      1   <NA>   <NA>   <NA>   <NA>   <NA>

【问题讨论】:

    标签: r filter dataframe dplyr


    【解决方案1】:

    您确定它使用的是 dplyr 的过滤器吗?尝试dplyr::filter 强制它使用dplyr 版本。

    在这里,我读入了您的一些数据并尝试了相同的命令,它按预期工作:

    dft <- read.table(text="   lab type form class     ami dateStarted GE-000 ANSI-000 ANSI-001 ANSI-002 ANSI-003 ANSI-004 ANSI-005 ANSI-006 ANSI-007 ANSI-008 ANSI-009
    V3 2078 KV2c  16S   200 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
    V4 2078 KV2c  16S   200 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
    V5 2078 KV2c  12S   200 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
    V6 2078 KV2c   9S    20 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
    V7 2078 KV2c  36S    20 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
    V8 2078 KV2c  45S    20 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>     <NA>  <NA>     <NA>     <NA>     <NA>     <NA>     <NA>", header=TRUE)
    
    library(dplyr)
    filter(dft, form=="9S")
    
    ## > filter(dft, form=="9S")
    ##    lab type form class     ami dateStarted GE.000 ANSI.000 ANSI.001 ANSI.002
    ## 1 2078 KV2c   9S    20 Flexnet   9/21/2010   <NA>     <NA>     <NA>     <NA>
    ##   ANSI.003 ANSI.004 ANSI.005 ANSI.006 ANSI.007 ANSI.008 ANSI.009
    ## 1     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
    

    如果这不起作用,请尝试在干净的会话中重新启动 R,也许你已经覆盖了你不应该覆盖的东西。

    【讨论】:

    • 嗯...你是对的。这似乎不是 dplyrs 的错。当我复制并粘贴您的代码时,它工作正常。我的数据框一定有问题...令人困惑的是,您的 read.table 数据框的列和我来自 OP 的原始数据框的列具有相同的相应类(因子、整数、数字等)跨度>
    • 这是我使用dplyr 时的常见问题,我必须将dplyr:: 前缀附加到函数中。
    猜你喜欢
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2019-03-09
    • 2012-01-09
    • 2019-03-10
    相关资源
    最近更新 更多