2015-04-29 4 views
0

У меня есть список, полный данных. Кадры с двумя столбцами, временем и сигналом. Данные представляют собой результаты хроматографического анализа на основе процесса, который периодически отбирали.Вставка NA после теста

Я хочу сравнить данные gc, которые я собрал.

Я написал функцию преобразования времен и площадей пиков в процентные области (исключая пик растворителя) и относительное время удерживания.

В связи с характером процесса разные GC имеют различное количество пиков, и поэтому сравнение не является простым. Примеси появляются в разных частях моего процесса и, следовательно, дают дополнительные пики.

Я хочу перечислить свой список и найти самый длинный вектор относительного времени удерживания (без проблем). Я хочу использовать самый длинный вектор в качестве компаратора и устанавливать значения NA в относительное время хранения, которые появляются одновременно с компаратором, но не отображаются в других кадрах данных.

Отсюда результаты следующего списка относительного времени удерживания,

prac <- list(a=c(0.203,0.305,0.444,0.780,1.000,1.101,1.403), 
      b=c(0.201,0.306,0.442,0.778,1.000,1.101,1.208,1.401)) 

где b- вектор компаратор, должен выглядеть

0.203 0.305 0.444 0.780 1.000 1.101 NA 1.403 
0.201 0.306 0.442 0.778 1.000 1.101 1.208 1.401 

Может кто-нибудь подскажет, как я мог бы быть в состоянии начать ?

Моя первая мысль была для цикла, но я не думаю, что это сработает. Обратите внимание, что иногда требуется более 1 значения NA.

(Я планирую сопоставить процентные области с относительным временем удерживания компаратора для всех хроматограмм, если только я могу выйти за рамки этой проблемы).

+1

I не знаю, что именно вы на самом деле хотите, это кажется простым, но за всем этим удержанием компаратора bla bla -fog я не вижу основных строительных блоков вашей проблемы ...; так: почему 7-е значение вашего списка NA? какое условие делает это NA? как вы хотите фильтровать, выбирать, применять условие или что-то в своем списке? Я понятия не имею, как вы получаете от prac к «вектору-компаратору» ??? – grrgrrbla

+0

@grrgrrbla первоначальный список, prac <- список (a = c (0,203,0,305,0,444,0,780,1,000,1,101,1,403), b = c (0.201,0.306,0.442,0.778,1,000,1,101,1.208,1.401))); так как самый длинный вектор - это b, это компаратор. Я хочу поставить NA в точке, где нет соответствующего аналогичного числа. это видно на выходе здесь, 0.203 0.305 0.444 0.780 1.000 1.101 NA 1.403 0.201 0.306 0.442 0.778 1.000 1.101 1.208 1.401 как входные, так и выходные данные были скопированы и вставлены из текста выше, что, скорее всего, создаст беспорядок в форматировании. – user1945827

+1

Что это значит? ровно равный? или в каких пределах?потому что ни одно из значений индексов векторов a и b (кроме [5] и [6]) не является абсолютно равным; общий совет: попробуйте отвлечься от своих «специальных имен» и просто взгляните на абстрактные свойства своей проблемы, чтобы люди, которые понятия не имеют, как работает обработка сигнала времени (например, я), помогают вам легче, никто не ответил здесь в течение 1 часа, что необычно на SO и знак того, что вы не указали свою проблему четко – grrgrrbla

ответ

1

Это одно решение (перебор) только с одним отсутствующего значением:

prac <- list(a=c(0.203,0.305,0.444,0.780,1.000,1.101,1.403), 
       b=c(0.201,0.306,0.442,0.778,1.000,1.101,1.208,1.401)) 


NA.index <- which(abs(prac$b[1:length(prac$a)] - prac$a) > 0.05) 
newlist.a <- c(prac$a[1:NA.index-1], NA, prac$a[NA.index]) 

это здесь должно быть generizeable (в зависимости от того, как данные на самом деле структурированы):

prac <- list(a=c(0.203,0.305,0.444,0.780,1.000,1.101,1.403), 
       b=c(0.201,0.306,0.442,0.778,1.000,1.101,1.208,1.401)) 

for(i in seq_along(prac$a)) { 
    if(abs(prac$b[i] - prac$a[i]) < 0.05) { 
     prac$a[i] <- prac$a[i] 
    } else { 
     prac$a[i+1] <- prac$a[i] 
     prac$a[i] <- NA 
    } 
} 

любопытных трудно чтобы рассказать, как обобщить это на примерах с множественными NA, если вы не дадите другой воспроизводимый пример, потому что прямо сейчас я просто нахожусь в темноте о том, как структурированы ваши данные.

+0

граница +/- 0,005. Какие элементы в каком порядке? Пик rrt 1.000 для каждой хроматограммы одинаковый, пики, которые распространяются от этого, должны сравниваться; следовательно, prac $ a [1: 5] и prac $ b [1: 5] можно сравнить, но prac $ a [6: 7] требует, чтобы NA был сопоставим с prac $ [6: 8]. Моя проблема заключается в том, как получить этот NA ... Если я могу это сделать, я должен уметь расширять эту функцию до более сложных случаев. – user1945827

+0

, пожалуйста, дайте мне еще один пример того, что из вас вышло более 2 ожидаемых значений NA. – grrgrrbla

+0

Вот выходы, структура (список (a = c (0.203, 0.305, 0.444, 0.78, 1, 1.101, 1.403 ), b = c (0.201, 0.306, 0.442, 0.778, 1, 1.101, 1.208, 1.401), d = c (0.201, 0.306, 0.778, 1, 1.101, 1.208, 1.401), e = c (0.201, 0.442, 0.778 , 1, 1.101, 1.401), f = c (0.442, 0.778, 1, 1.101, 1.208, 1.401)), .Names = c ("a", "b", "d", "e", "f ")), где 'a' и 'b', где по-прежнему, но d, e и f имеют отсутствующие значения в разных частях последовательности. (Но вы много сделали для ответа на вопрос: на самом деле, вы ответили на исходный вопрос, который я закрою в течение следующих нескольких дней) – user1945827

Смежные вопросы