Функция R, чтобы найти значение в той же таблице и столбце, но другое значение - PullRequest
0 голосов
/ 03 ноября 2019

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

df <- data.frame(Sample_Name = c("Smpl 1", "Smpl 1", "Smpl 2", "Smpl 2"), 
                 Peak_Area = c(100, 101, 50, 51),
                 Analyte = c("Asn","Asn*","Leu","Leu*"),
                 Int_Std = c("Asn*","","Leu*",""))

Итак, чтобы определить скорректированную площадь пика, мне нужно найти внутреннюю стандартную площадь пика для того же образца и того же имени аналита, сопоставив поле Int Stdс полем аналита. Таким образом, для образца 1 рассчитанное значение будет 100/101.

По сути, я хочу посмотреть на каждую строку. Если в нем есть значение поля «Analyte» и «Int Std», я хочу, чтобы он нашел другую строку, которая совпадает с «Sample Name» и где «Analyte» = «Int Std», и разделил исходную строку «Peak». Значение "Площадь" по найденному ряду Значение "Площадь пика" (100/101)

1 Ответ

0 голосов
/ 04 ноября 2019

Вы можете попробовать:

library(dplyr)

df %>%
  mutate_if(is.factor, as.character) %>%
  group_by(`Sample Name`) %>%
  mutate(
    `Adjusted Peak` = if (any(Analyte %in% `Int Std`)) `Peak Area`[!Analyte %in% `Int Std`] / `Peak Area`[Analyte %in% `Int Std`] else NA_real_
  )

Вывод:

# A tibble: 4 x 5
# Groups:   Sample Name [2]
  `Sample Name` `Peak Area` Analyte `Int Std` `Adjusted Peak`
  <chr>               <dbl> <chr>   <chr>               <dbl>
1 Smpl 1                100 Asn     Asn*                0.990
2 Smpl 1                101 Asn*    ""                  0.990
3 Smpl 2                 50 Leu     Leu*                0.980
4 Smpl 2                 51 Leu*    ""                  0.980
...