Добавить строку в матрицу, если имя строки отсутствует в списке R - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть matrix_1, например:

    Group1 Group2 Group3
Sp1 1 1 1
Sp3 1 0 0
Sp4 1 1 0
Sp5 1 0 1
Sp6 0 1 1
Sp7 0 1 1

и

list_Sp=c("Sp1","Sp2","Sp3","Sp4","Sp5","Sp6","Sp7","Sp8")

И я хотел бы добавить в эту матрицу_1 строку, заполненную 0 значениями с SpX в list_Sp, если его еще нет в имени строки матрицы.

Здесь Sp2 и Sp8 нет, тогда я добавляю их как:

New_matrix:

    Group1 Group2 Group3
Sp1 1 1 1
Sp3 1 0 0
Sp4 1 1 0
Sp5 1 0 1
Sp6 0 1 1
Sp7 0 1 1
Sp2 0 0 0
Sp8 0 0 0

Спасибо за вашу помощь

1 Ответ

1 голос
/ 05 апреля 2020

Назовите вашу входную матрицу M, тогда мы можем сделать следующее:

# find which are new
new_rows = list_Sp[!list_Sp %in% rownames(M)]

# build a matrix with 0s in the right shape & with the right names
new_data = matrix(0L, nrow = length(new_rows), ncol = ncol(M), 
                  dimnames = list(new_rows, colnames(M)))

# "attach" it to M with rbind
new_M = rbind(M, new_data)
new_M
#     Group1 Group2 Group3
# Sp1      1      1      1
# Sp3      1      0      0
# Sp4      1      1      0
# Sp5      1      0      1
# Sp6      0      1      1
# Sp7      0      1      1
# Sp2      0      0      0
# Sp8      0      0      0

Если вы хотите, чтобы Sp1..Sp8 был в порядке, вы можете добавить еще одну строку:

new_M = new_M[order(rownames(new_M)), ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...