Также есть столбец
![$S$ $S$](https://dxdy-03.korotkov.co.uk/f/e/2/5/e257acd1ccbe7fcb654708f1a866bfe982.png)
, в котором указана принадлежность образцов к группам
S - отдельная переменная? Это не принципиально, но в примерах кода я предположу, что да. Дополнительно предположу, что S - вектор (если нет, придётся добавить один индекс, равный единице).
Для обработки данных мне надо уметь выделять образцы из этой таблицы в подтаблицы: например, выбрать именно те образцы, которые HE входят в группу
![$B$ $B$](https://dxdy-03.korotkov.co.uk/f/6/1/e/61e84f854bc6258d4108d08d4c4a085282.png)
. Или те, что входят в
![$C$ $C$](https://dxdy-02.korotkov.co.uk/f/9/b/3/9b325b9e31e85137d1de765f43c0f8bc82.png)
и
![$G$ $G$](https://dxdy-02.korotkov.co.uk/f/5/2/0/5201385589993766eea584cd3aa6fa1382.png)
.
Если я правильно понял задачу, достаточно использовать Булевы индексы:
Код:
mytable <- matrix(
ncol=8, byrow=T,
dimnames=list(
c("par1","par2","par3","par4","par1000"),
c("s1","s2","s3","s4","s5","s6","s7","s150")
),
data=c(
3, 4, 0, 2, 10, 5, 12, 4,
7, 3, 0, 3, 8, 9, 9, 6,
4, 2, 1, 3, 7, 8, 7, 1,
10, 2, 1, 3, 5, 8, 7, 15,
2, 3, 7, 8, 12, 0, 3, 11
)
)
S <- factor(c("A", "A", "B", "A", "C", "B", "C", "G"))
stopifnot(length(S) == ncol(mytable))
mytable[,S=="C" | S=="G"]
# s5 s7 s150
# par1 10 12 4
# par2 8 9 6
# par3 7 7 1
# par4 5 7 15
# par1000 12 3 11
Выбрать из таблицы mytable все строки (до запятой ничего не стоит) и те столбцы, для которых в векторе
![$ \{ S_i = C \lor S_i = G \quad \forall i \} $ $ \{ S_i = C \lor S_i = G \quad \forall i \} $](https://dxdy-01.korotkov.co.uk/f/4/5/1/4513e2ced51280060404ea08410a078582.png)
находится
![$\mathrm{TRUE}$ $\mathrm{TRUE}$](https://dxdy-01.korotkov.co.uk/f/c/e/4/ce48f89d6a48a7a8cb73e7f45fe21a6582.png)
.
Замечу, что класс data.frame, используемый в R для многих задач, предполагает, что образцы располагаются по строкам, а параметры - по столбцам. Отличие датафреймов от матриц в том, что разные колонки могут иметь разные типы:
Код:
myframe <- cbind(as.data.frame(t(mytable)), S)
str(myframe)
# 'data.frame': 8 obs. of 6 variables:
# $ par1 : num 3 4 0 2 10 5 12 4
# $ par2 : num 7 3 0 3 8 9 9 6
# $ par3 : num 4 2 1 3 7 8 7 1
# $ par4 : num 10 2 1 3 5 8 7 15
# $ par1000: num 2 3 7 8 12 0 3 11
# $ S : Factor w/ 4 levels "A","B","C","G": 1 1 2 1 3 2 3 4
myframe[myframe$S != "B",]
# par1 par2 par3 par4 par1000 S
# s1 3 7 4 10 2 A
# s2 4 3 2 2 3 A
# s4 2 3 3 3 8 A
# s5 10 8 7 5 12 C
# s7 12 9 7 7 3 C
# s150 4 6 1 15 11 G