У меня есть большая (конечно) матрица спектроскопических данных, где каждый столбец представляет различное значение массы, а строки представляют образцы из анализа.Небольшой пример ...
mydata <- matrix(c(c(1.95,6,1,0),c(1.76,3,2,14),c(3.67,2,1.55,7),c(0.57,3,8,12),c(2.33,3,16,2)),nrow = 4, ncol = 5)
rnames <- c("threshold", "S1", "S2", "S3")
row.names(mydata)<- rnames
# [,1] [,2] [,3] [,4] [,5]
# threshold 1.95 1.76 3.67 0.57 2.33
# S1 6.00 3.00 2.00 3.00 3.00
# S2 1.00 2.00 1.55 8.00 16.00
# S3 0.00 14.00 7.00 12.00 2.00
Первая строка представляет собой пороговое значение, и для рассмотрения значение выборки должно в 3 раза превышать пороговое значение.Я хочу сравнить первое значение строки со всеми значениями в последующих строках столбца и вернуть значение ячейки, если оно равно>> 3-кратному значению первой строки, а в противном случае заменить ячейку на «0».
Итак, для этих небольших выборочных данных выходная матрица, на которую я бы надеялся, выглядела бы так:
mydata2 <- matrix(c(c(1.95,6,0,0),c(1.76,0,0,14),c(3.67,0,0,0),c(0.57,3,8,12),c(2.33,0,16,0)),nrow = 4, ncol = 5)
row.names(mydata2) <- rnames
# [,1] [,2] [,3] [,4] [,5]
# threshold 1.95 1.76 3.67 0.57 2.33
# S1 6.00 0.00 0.00 3.00 0.00
# S2 0.00 0.00 0.00 8.00 16.00
# S3 0.00 14.00 0.00 12.00 0.00
Я думаю, что есть способ использовать apply
для запуска этого, но мойзнание R не распространяется так далеко (пока)
Следует отметить, что пороговая (первая) строка изначально представляла собой отдельную матрицу 1xn, которая была вставлена в первую строку с помощью InsertRow
.Если было бы проще сравнивать матрицу данных с «пороговой» матрицей, а не сравнивать строки внутри матрицы, тем лучше.
Спасибо за помощь в решении этой проблемы!