首页 > 解决方案 > R:需要帮助匹配表行并获取差异

问题描述

我在一个按峰位置和各种样品的积分值组织的表中有色谱数据。表中的所有样品都具有重复测量以及不同的样品日志编号。

我感兴趣的是各种峰测量的可重复性。对此的衡量标准是每个样品的峰积分差异 = 0。

数据

Sample Log1     Log2      Peak1    Peak2     Peak3     Peak4    Peak5
A       100      104        0.20    0.80      0.30       0.00    0.00
B       101      106        0.25    0.73      0.29       0.01    0.04
C       102      103        0.20    0.80      0.30       0.00    0.07
C       103      102        0.22    0.81      0.31       0.04    0.00
A       104      100        0.21    0.70      0.33       0.00    0.10
B       106      101        0.20    0.73      0.37       0.00    0.03

其中 Log1 是原始样本日志编号,Log2 是重复日志编号。

如何为每个峰值构造一个新变量(即差异 PeakX_Log1 - PeakX_Log2)?

请注意,在我的示例中,我只有 5 个峰值。现实生活中的情况是一个复杂的混合物,涉及 >20 个峰,因此很难手动完成。

标签: r

解决方案


如果每个样本只有两个值,则可以使用以下方法:

df <- data.table::fread(
  "Sample Log1     Log2      Peak1    Peak2     Peak3     Peak4    Peak5
A       100      104        0.20    0.80      0.30       0.00    0.00
B       101      106        0.25    0.73      0.29       0.01    0.04
C       102      103        0.20    0.80      0.30       0.00    0.07
C       103      102        0.22    0.81      0.31       0.04    0.00
A       104      100        0.21    0.70      0.33       0.00    0.10
B       106      101        0.20    0.73      0.37       0.00    0.03"
)

library(tidyverse)
new_df <- df %>% 
  mutate(Log = ifelse(Log1 < Log2,"Log1","Log2")) %>% 
  select(-Log1,-Log2) %>% 
  pivot_longer(cols = starts_with("Peak"),names_to = "Peak") %>% 
  pivot_wider(values_from = value, names_from = Log) %>% 
  mutate(Variation = Log1 - Log2)

new_df
# A tibble: 15 × 5
   Sample Peak   Log1  Log2 Variation
   <chr>  <chr> <dbl> <dbl>     <dbl>
 1 A      Peak1  0.2   0.21   -0.0100
 2 A      Peak2  0.8   0.7     0.100 
 3 A      Peak3  0.3   0.33   -0.0300
 4 A      Peak4  0     0       0     
 5 A      Peak5  0     0.1    -0.1   
 6 B      Peak1  0.25  0.2     0.05  
 7 B      Peak2  0.73  0.73    0     
 8 B      Peak3  0.29  0.37   -0.08  
 9 B      Peak4  0.01  0       0.01  
10 B      Peak5  0.04  0.03    0.01  
11 C      Peak1  0.2   0.22   -0.0200
12 C      Peak2  0.8   0.81   -0.0100
13 C      Peak3  0.3   0.31   -0.0100
14 C      Peak4  0     0.04   -0.04  
15 C      Peak5  0.07  0       0.07  

推荐阅读