过滤器在dplyr返回错误 [英] filter in dplyr returning error

查看:149
本文介绍了过滤器在dplyr返回错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

任何人都知道为什么会发生这种情况?
我有一个数据框,我试图用dplyr过滤它。

  filter(dft,form ==9S)
结构中的错误(as.character(x),names = names(x),dim = dim(x),dimnames = dimnames(x)):
'names'属性[1020]必须与矢量的长度相同[113]

这是事情我想要考虑:

  class(dft $ form)
[1]因子

所以...不知道问题是什么.dplyr应该是期待的因素,我已经看到使用dplyr的过滤器与字符串进行这样的事情的人很多例子。



这里是 dft

 实验室类型表单类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 b $ b 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-071 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-102 GE-102 GE-103 GE-105 GE-108 GE-124 / < 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>


解决方案

您确定使用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>
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)

库(dplyr)
过滤器(dft,form ==9S)

##> (dft,form ==9S)
##实验室类型表单类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,也许您已经覆盖了您不应该覆盖的内容。


Anyone have an idea why this is happening? I've got a dataframe and I'm trying to filter it with 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]

Here is the class of the thing I'm trying to factor:

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

So...Not sure what the problem is..dplyr should be expecting factors, and I've seen plenty of examples online of people using dplyr's filter with strings to do this very thing.

Here's the head of the 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>

解决方案

Are you sure it's using dplyr's filter? Try dplyr::filter to force it to use the dplyr version.

Here I read in some of your data and try the same command and it works as expected:

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>

If this doesn't work try restarting R in a clean session, perhaps you've overwritten something you ought not to have overwritten.

这篇关于过滤器在dplyr返回错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆