Подстановка попарной матрицы с помощью 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" и т. Д., Но я хочу, например, все TF.
Я считаю, что это может быть 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
Это потому, что поскольку это попарно, столбцы и строки имеют имена?
Спасибо
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)