Также есть столбец
, в котором указана принадлежность образцов к группам
S - отдельная переменная? Это не принципиально, но в примерах кода я предположу, что да. Дополнительно предположу, что S - вектор (если нет, придётся добавить один индекс, равный единице).
Для обработки данных мне надо уметь выделять образцы из этой таблицы в подтаблицы: например, выбрать именно те образцы, которые HE входят в группу
. Или те, что входят в
и
.
Если я правильно понял задачу, достаточно использовать Булевы индексы:
Код:
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 все строки (до запятой ничего не стоит) и те столбцы, для которых в векторе
находится
.
Замечу, что класс 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