Подмножество попарной матрицы с помощью wlidcard

Я хотел бы разделить часть большой попарной матрицы на более мелкие матрицы. например

    TF1 TF2 TF3 TG1 TG2 TG3
TF1 0    2   1  450 460 450
TF2 2    0   1  452 462 462
TF3 1    2   0  451 461 451
TG1 450 452 450 0   2   0
TG2 460 462 462 2   0   1
TG3 450 452 451 1   2   0

Я могу подмножество, если я введу точное имя столбца и строки "TF1" и т. Д., Но я хочу, например, все ТФ.

Я полагаю, что это может быть grep, но я не могу поместить grep где-нибудь в моей форумуле:

TF <-T_PW[c("TF1","TF2","TF3"),c("TF1","TF2","TF3")]

Это ожидаемая матрица вывода:

    TF2 TF3 TF1   
TF1 0   2   1
TF2 2   0   1
TF3 1   2   0

Это потому, что, поскольку это попарно, столбцы и строки имеют имена?

Спасибо


person babyl    schedule 24.04.2018    source источник
comment
Можете ли вы обеспечить желаемый результат? Сколько матриц меньшего размера вы хотите получить из большой матрицы?   -  person acylam    schedule 24.04.2018
comment
Привет, да, желаемый результат будет:   -  person babyl    schedule 26.04.2018
comment
TF1 TF2 TF3 TF1 0 2 1 TF2 2 0 1 TF3 1 2 0 Итак, просто разбиваем часть большей матрицы на меньшую.   -  person babyl    schedule 26.04.2018


Ответы (1)


grep возвращает индексы ввода, соответствующие предоставленному регулярному выражению:

> grep('^TF', rownames(T_PW))
[1] 1 2 3

> grep('^TF', colnames(T_PW))
[1] 1 2 3

Таким образом, вы можете поместить grep внутри [] для подмножества rownames и colnames матрицы:

TF = T_PW[grep('^TF', rownames(T_PW)), grep('^TF', colnames(T_PW))]

Поскольку rownames симметричны colnames, вы также можете сделать что-то вроде этого:

TF_names = grep('^TF', colnames(T_PW))

T_PW[TF_names, TF_names]

Результат:

    TF1 TF2 TF3
TF1   0   2   1
TF2   2   0   1
TF3   1   2   0

Данные:

T_PW = read.table(text="    TF1 TF2 TF3 TG1 TG2 TG3
TF1 0    2   1  450 460 450
                 TF2 2    0   1  452 462 462
                 TF3 1    2   0  451 461 451
                 TG1 450 452 450 0   2   0
                 TG2 460 462 462 2   0   1
                 TG3 450 452 451 1   2   0", header = TRUE, row.names=1)

T_PW = as.matrix(T_PW)
person acylam    schedule 26.04.2018