Заменить один столбец в матрице на> 1 столбец - PullRequest
0 голосов
/ 10 сентября 2018

Как легко заменить вектор / столбец (N x 1) матрицы (N x M) на матрицу (N x K), чтобы в результате получилась матрица (N x (M - 1 + K))? 1005 *

Пример :

a <- matrix(c(1, 3, 4, 5), nrow = 2) # (2 x 2)
b <- matrix(c(1, 3, 5, 6, 7, 7), nrow = 2) # (2 x 3)

Теперь я хочу сделать что-то вроде этого:

a[, 1, drop = FALSE] <- b # Error

, что не нравится R.

Все, что я мог придумать, это двухэтапныйподход: присоедините b к a и затем удалите столбец 1. Проблема: он смешивает порядок появления столбцов.

В принципе, я хочу сделать простую замену.Я уверен, что это возможно как-то.

1 Ответ

0 голосов
/ 10 сентября 2018

Вы можете использовать cbind:

cbind(b, a[,-1])
#     [,1] [,2] [,3] [,4]
#[1,]    1    5    7    4
#[2,]    3    6    7    5

Если вам нужно вставить середину большой матрицы (скажем, в столбце N), а не один конец, который вы можете использовать,

cbind(a[, 1:(N-1)], b, a[, (N+1):NCOL(a)])

Для обобщенной версии, которая работает везде, где вставка (начало, середина или конец), мы можем использовать

a <- matrix(1:10, nrow = 2) 
b <- matrix(c(100, 100, 100, 100, 100, 100), nrow = 2) 

N <- 6 # where we want to insert
NMAX <- NCOL(a) # the largest column where we can insert

cbind(a[, 0:(N-1)], b, {if(N<NMAX) a[,(N+1):NMAX] else NULL})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...