Полученный результат (2 строки x 3 столбца) - это то, что следует ожидать от R, так как оно равняется cbind
вектору (id
, с повторным использованием) и матрице (m
).
IMO, было бы лучше использовать list
или array
(когда измерения совпадают, не допускается сочетание числовых значений и значений факторов), если вы действительно хотите связать разные структуры данных. Иначе, просто cbind
ваша матрица к существующему data.frame, если у обоих одинаковое количество строк, выполнит работу. Например
x1 <- replicate(2, rnorm(10))
x2 <- replicate(2, rnorm(10))
x12l <- list(x1=x1, x2=x2)
x12a <- array(rbind(x1, x2), dim=c(10,2,2))
и результаты читаются
> str(x12l)
List of 2
$ x1: num [1:10, 1:2] -0.326 0.552 -0.675 0.214 0.311 ...
$ x2: num [1:10, 1:2] -0.164 0.709 -0.268 -1.464 0.744 ...
> str(x12a)
num [1:10, 1:2, 1:2] -0.326 0.552 -0.675 0.214 0.311 ...
Списки проще в использовании, если вы планируете использовать матрицу с различными размерами, и при условии, что они организованы таким же образом (для строк), что и внешние данные. Рамку вы можете также легко подгруппировать. Вот пример:
df1 <- data.frame(grp=gl(2, 5, labels=LETTERS[1:2]),
age=sample(seq(25,35), 10, rep=T))
with(df1, tapply(x12l$x1[,1], list(grp, age), mean))
Вы также можете использовать функции lapply
(для списка) и apply
(для массива).