Это небольшой раздел моего фактического набора данных.
1 2 3 4 5
57.033 57.0332 57.0333 57.0339 57.03332
57.033 57.033 57.0335 59.0490 59.04901
59.0489 59.048 59.0490589 60.0806 60.08
60.0805 60 60.08 60 60.08059
60.08053 60.080 60.08 61.0366 61.03947
Вторая матрица той же структуры.
mz2
1 2 3 4 5
17.26 16.95225 17 17.84 17.79
14 141 143 632 629
630 63 631.337 241.5272 239
539 41 413 412 412
41 240 241 640 56
Мне нужно сравнить первое значение в столбце 1 со всеми значениями во всех столбцах, и если они соответствуют моим критериям, я должен добавить значение в первую строку этого конкретного столбца. Это произойдет в итерации. Затем я проверяю вторую строку в столбце 1 и сопоставляю все значения во всех столбцах, и если они соответствуют критериям, то добавляю их в строку 2 конкретного столбца.
Я пытался использовать циклы for, но это довольно запутанно.
Это моя попытка:
x.mz1<-matrix(0,5,5)
b1.mz=mz[,1] ##mz is my sample data above
b2.mz=mz2[,1]
for (i in length(b1.mz))
{
one.mz=b1.mz[i]
one.2=b2.mz[i]
for (j in 2:ncol(mz))
{
two.1=mz[,j]
two=mz2[,j]
for (k in 1:length(two.1))
{
sec.mz=two.1[k]
sec=two[k]
cond1[k]<-one.mz-two.1<0.000005
cond2[k]<-one.2-two<10
cond.check<-cbind(cond1[k],cond2[k])
cond.chc<-rbind(cond.check)
browser()
}
cond.chk.sum<-apply(cond.chc,1,sum)
sum.check<-sum(cond.chk.sum==2,na.rm=T)
if (sum.check==1)
{
x.mz1[i,j]=sec.mz
}
Что я пробовал в своем коде: я пытался сгенерировать логическую матрицу из всех итераций, и после того, как все строки в столбце 2 будут проверены на соответствие критериям, будет логическая матрица, и когда матрица будет сгенерирована, она будет иметь размер 5x2 для оба условия. Затем, когда оба условия ИСТИННЫ, я добавляю значение столбца 2 в строку 1, если я сравниваю первое значение в столбце 1.
Я надеюсь, что это ясно, поскольку я совершенно запутался после того, как попробовал все циклические структуры туда и обратно. Есть ли более простой способ сделать это, не используя так много циклов? с помощью lappy или какой-либо другой функции.
вывод: не точные значения, а чтобы дать представление о том, что я ожидаю в качестве вывода.
1 2 3 4 5
57.03326875 57.03329 0 57.033 57
57.03329688 0 0 0 59.049
59.04894556 60.0805 59.049 60 0
60.0805355 0 0 60.080 60.080
60.08053673 61.039281 0 60.09 61.0839
первый столбец - это мой столбец 1 в основной матрице, и к нему рассчитываются все остальные столбцы. если я найду одно значение из всех совпадающих строк, я добавлю его в строку и соответствующий столбец, к которому принадлежит значение. 0 означает, что этому значению в столбце 1 не соответствует ни одно значение из всех строк в этом столбце.
dput
немного по обеим матрицам и ожидаемому результату? Также наметьте критерии больше. (разница в столбце ‹ 0,000005, разница во второй матрице ‹ 10 ?) - person Will   schedule 25.12.2013== 2
в, например, следующей матрице?((mz2[1,1] - mz2[,-1]) < 10) + ((mz[1,1] - mz[,-1]) < 0.000005)
. Если это так, то есть более одного2
с предоставленными вами примерами данных. - person alexis_laz   schedule 25.12.2013