функция фильтра в ошибках 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, я хочу filter и удалить строки с помощью grepl:

require(dplyr) 

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

Однако я получаю сообщение об ошибке:

имя объекта не найдено

Я также получаю:

В data.matrix(data): NA введены путем принуждения.

Объект 'name', очевидно, в dataframe. Может кто-нибудь, пожалуйста, помогите?

Ответ 1

Кажется, что вы получаете функцию 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.

Это работает для функций из любого пакета.

Ответ 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 и мы увидим, что версия filter dplyr снова работает

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

Ответ 3

Я переустановил пакет Rlang с перезапуска сессии, и это помогло

Ответ 4

Спасибо за решение. Но в моем случае я столкнулся с проблемой, которая довольно странная, когда я просто говорю фильтр (df, city == "mysore"), но он возвращает 0 строк.

Ответ 5

Я думаю, вам нужно как установить пакет dplyr с помощью install.packages("dplyr") и затем использовать library команд library(dplyr) для загрузки dplyr в память для использования.
Например, набор данных mtcars является частью dplyr, если я только установлю dplyr а затем head(mtcars) он его не найдет. Как только я использую команду library она найдена.