Не знаю об этой ошибке: неправильный вход в аргументе «по»

У меня есть следующий набор данных:

 >k1[1:10,]
       id  web_name first_name second_name   position     date team1 team2 game_week points home_away team_scored team_conceded minutes goals assists
    1   1 Fabianski     Lukasz   Fabianski Goalkeeper 17/08/13   ARS   AVL         1      0         H           1             3       0     0       0
    2   1 Fabianski     Lukasz   Fabianski Goalkeeper 24/08/13   ARS   FUL         2      0         A           3             1       0     0       0
    3   1 Fabianski     Lukasz   Fabianski Goalkeeper 01/09/13   ARS   TOT         3      0         H           1             0       0     0       0
    4   1 Fabianski     Lukasz   Fabianski Goalkeeper 14/09/13   ARS   SUN         4      0         A           3             1       0     0       0
    5   1 Fabianski     Lukasz   Fabianski Goalkeeper 22/09/13   ARS   STK         5      0         H           3             1       0     0       0
    6   1 Fabianski     Lukasz   Fabianski Goalkeeper 28/09/13   ARS   SWA         6      0         A           2             1       0     0       0
    7   1 Fabianski     Lukasz   Fabianski Goalkeeper 06/10/13   ARS   WBA         7      0         A           1             1       0     0       0
    8   1 Fabianski     Lukasz   Fabianski Goalkeeper 19/10/13   ARS   NOR         8      0         H           4             1       0     0       0
    9   1 Fabianski     Lukasz   Fabianski Goalkeeper 26/10/13   ARS   CRY         9      0         A           2             0       0     0       0
    10  1 Fabianski     Lukasz   Fabianski Goalkeeper 02/11/13   ARS   LIV        10      0         H           2             0       0     0       0

Когда я запускаю код:

 > k2<- as.data.frame(k1 %>% group_by(id) %>%
 mutate(min1 = lag(minutes, default=NA)) %>%
 mutate(min3 = rollapply(min1,width=3,mean, align= "right", fill=NA)))

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

Error: wrong sign in 'by' argument

Однако группировка по team1 с помощью этого кода работает нормально:

> k2<- as.data.frame(k1 %>% group_by(team1) %>%
   mutate(min1 = lag(minutes, default=NA)) %>%
   mutate(min3 = rollapply(min1,width=3,mean, align= "right", fill=NA)))

Довольно непонятно, почему это происходит. Любая помощь приветствуется.


person Manasvi Bali    schedule 08.08.2015    source источник
comment
Есть ли причина, по которой второй вызов отличается параметрами default и fill? Оба равны 0 в вашей нерабочей попытке и NA во второй   -  person erasmortg    schedule 08.08.2015
comment
@erasmortg оба NA, я просто методом проб и ошибок вставил неправильный фрагмент. Отредактировано.   -  person Manasvi Bali    schedule 08.08.2015
comment
Можете ли вы показать некоторые из ваших фактических данных через head(dput())? Кажется, я не могу воспроизвести вашу проблему. Кроме того, я не думаю, что вам нужно оборачивать свои звонки в as.data.frame(), это удалит группировку   -  person erasmortg    schedule 08.08.2015
comment
Нет причин не работать с ЭТИМ набором данных, так как у вас один идентификатор и одна команда (1 и ARS). Однако, если вы используете больший набор данных, то есть только одна причина, по которой он работает с группировкой team1, а не с id. Вероятно, в какой-то команде есть идентификатор (идентификатор игрока), который имеет менее 3 строк. Таким образом, roallapply с шириной = 3 создает проблему. Я думаю, что нет команды с менее чем 3 строками, так что все работает нормально. Надеюсь, я помог.   -  person AntoniosK    schedule 08.08.2015
comment
Да, вы правы @AntoniosK, набор данных на самом деле довольно большой. А есть игроки (каждый с уникальным id), у которых меньше 3 рядов. Мне помогло следующее изменение в коде: k2‹- as.data.frame(k1 %›% group_by(id) %›% mutate(min1 = lag(minutes, default=NA)) %›% mutate(min3 = rollapply( min1, ширина = 3, среднее, выравнивание = справа, заполнение = NA, частичное = TRUE)))   -  person Manasvi Bali    schedule 09.08.2015


Ответы (1)


У этого могут быть разные причины, но просто это может произойти, если вы передадите NULL dataframe в функцию rollapply.

Также рассмотрите возможность использования zoo() как

rollapply(Zoo(min1),width=3,mean, align= "right", fill=NA)
person user3322581    schedule 04.12.2017