функция фильтра в ошибках 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
она найдена.