R中的dplyr中的过滤功能不起作用

时间:2015-08-28 08:54:06

标签: r dplyr

我在R中有一个数据框,就像所谓的UK_profiles

row.names   id     name
1   1   8131437     Profile
2   2   8131719     WolverineCompetition
3   4   8132011     www.vaseline.com
4   10  23265829    www.keepingskinamazing.co.uk
5   23  8042743     Mobile
6   24  8043312     Test
7   25  90914664    Join Our Core
8   26  45272695    UDF
9   27  50547829    apps.euro-bureau.eu/fairathon
10  28  50916438    www.benjerry.intashop.com/
11  44  83667343    All Web Site Data
12  45  84556272    UK

使用dplyr我希望用grepl过滤和删除行:

require(dplyr) 

UK_profiles.filtered <- filter(UK_profiles, !grepl("Rollup|Microsite|Mobile|Test|tset|Profile|Facebook|Unfiltered|returnurl", name))

但是,我收到错误说:

  

对象&#39; name&#39;未找到。

我也得到:

  

在data.matrix(数据)中:强制引入的NA。

对象'name'显然位于数据框中。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:41)

看起来您似乎获得了stats::filter功能,而不是dplyr功能。为确保您选择正确的,请使用符号dplyr::filter

d = data.frame(x=1:10,
 name=c("foo","bar","baz","bar","bar","baz","fnord","qar","qux","quux"))

filter(d, !grepl("ar|ux", name))
Error in grepl("ar|ux", name) : object 'name' not found

dplyr::filter(d, !grepl("ar|ux", name))
  x  name
1 1   foo
2 3   baz
3 6   baz
4 7 fnord

您甚至不需要library(dplyr)来实现此目的 - 您确实需要安装dplyr

这适用于任何包的功能。

答案 1 :(得分:2)

要了解发生这种情况的原因,您可以通过以下步骤直接重新创建错误。

加载dplyr

dplyr加载到仅加载了默认库的新会话中,filter将在dplyr

之后加载stats
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

filter(mtcars, mpg < 15)
#>    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#> 1 14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
#> 2 10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
#> 3 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
#> 4 14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
#> 5 13.3   8  350 245 3.73 3.840 15.41  0  0    3    4

卸载dplyr

这会导致错误,因为现在尝试使用stats::filter。通过卸载stats,我们看到另一个错误,即根本找不到名为filter的函数

detach("package:dplyr")  # Unload dplyr
filter(mtcars, mpg < 15)  # Using stats::filter
#> Error in filter(., mpg < 15): object 'mpg' not found

detach("package:stats")  # Unload stats

filter(mtcars, mpg < 15)    
#> Error in filter(., mpg < 15): could not find function "filter"

重新加载统计信息和dplyr

确保在dplyr之后重新加载stats,我们发现dplyr filter版本再次有效

library(stats)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> 
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

filter(mtcars, mpg < 15)
#>    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#> 1 14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
#> 2 10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
#> 3 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
#> 4 14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
#> 5 13.3   8  350 245 3.73 3.840 15.41  0  0    3    4

答案 2 :(得分:1)

我重新启动了 rlang 包并重启了会话,并帮助了

答案 3 :(得分:-1)

我认为您需要同时使用dplyr安装install.packages("dplyr")包,然后使用library命令library(dplyr)dplyr加载到内存中以供使用。
例如,mtcars数据集是dplyr的一部分,如果我只安装dplyr,然后输入head(mtcars)则找不到它。一旦我使用library命令,就会找到它。