#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
.