Почему group_by () не работает с функцией apply()

#r #dplyr

#r #dplyr

Вопрос:

У меня есть матрица, и я хочу вычислить произведения последовательностей для каждого столбца матрицы по группам. Во-первых, каждой группе соответствуют разные номера. Во-вторых, каждый столбец матрицы также должен вычисляться отдельно.

Например, для столбца пользователя 1 и y число должно быть 1*1 ; для столбца пользователя 2 и y число должно быть 2*3*1

Я использовал apply с group_by , но результат неверен.

 #data
user<-c(1,1,2,2,2)
y<-c(1,1,2,3,1)
z<-c(2,2,3,3,3)
dt<-data.frame(user,y,z)
  user y z
1    1 1 2
2    1 1 2
3    2 2 3
4    2 3 3
5    2 1 3
  

Приведенный ниже вывод составлен не пользователем

  dt%>%group_by(user)%>% (function(x){apply(x[,2:3],2,prod)})
      y   z 
      6 108
  

Желаемый результат (вы также можете удалить NA. Не имеет значения, добавляется новый столбец или нет)

     [,1] [,2]
[1,]   NA   NA
[2,]    1    4
[3,]   NA   NA
[4,]   NA   NA
[5,]    6   27
  

Комментарии:

1. Во-первых, у вас нет матрицы, скорее фрейма данных. Во-вторых, зачем вам эти NA s там? Вы пытаетесь добавить эти результаты в виде новых столбцов в свой фрейм данных? Т.Е. просто dt %>% group_by(user) %>% summarise_all(funs(prod)) было бы недостаточно?

2. независимо от того, добавляются новые столбцы или нет, оба в порядке.

3. Группы уважаются только другими dplyr функциями, такими как summarise и do .