По сути, я хочу сгруппировать трехмерный массив по столбцам, преобразовать его в кадр данных и связать с ним новый столбец, значение которого равно сумме всех существующих столбцов.
Например,рассмотрим следующий трехмерный массив
> (src <- array(1:8, c(2, 2, 2), dimnames=list(c('X1', 'X2'), c('Y1', 'Y2'), 1:2)))
, , 1
Y1 Y2
X1 1 3
X2 2 4
, , 2
Y1 Y2
X1 5 7
X2 6 8
Я хотел бы преобразовать его в
> (dest <- list(Y1=data.frame(X1=c(1, 5), X2=c(2, 6), Y1=c(1, 5)+c(2, 6)),
Y2=data.frame(X1=c(3, 7), X2=c(4, 8), Y2=c(3, 7)+c(4, 8))))
$Y1
X1 X2 Y1
1 1 2 3
2 5 6 11
$Y2
X1 X2 Y2
1 3 4 7
2 7 8 15
Я знаю, как выполнить преобразование для каждого отдельного столбца в исходном массиве, но понятия не имеюкак обрабатывать несколько столбцов одновременно.
> library(dplyr)
> as.data.frame(t(src[, 'Y1', ])) %>% mutate(Y1=X1+X2)
X1 X2 Y1
1 1 2 3
2 5 6 11
Не стесняйтесь использовать base R, dplyr
, data.table
или любой другой пакет, который вы предпочитаете, если он достаточно быстрый. В реальном приложении dim(src)
имеет тенденцию быть чем-то вроде c(hundreds, tens, tens of thousands)
.