我在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'
显然位于数据框中。有人可以帮忙吗?
答案 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
命令,就会找到它。