r - 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 个峰,因此很难手动完成。
解决方案
如果每个样本只有两个值,则可以使用以下方法:
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
推荐阅读
- sql - SQL 查找从未上课的学生(无子查询或聚合)
- python - 使用 Python 进行日志分析
- javascript - 如何在柏树中获取复制到剪贴板的内容
- recursion - 代码分析忽略 OpenMP 结构;分析单线程代码
- c# - 如何暂停在航点之间移动的 navmesh 代理然后继续?
- r - 有没有办法可以在一个图中绘制 t = 300、350、450 和 500 条线?
- python - 在 matplotlib 中将 y 轴设置为从 0 开始
- typescript - Typescript - const 声明中缺少初始化程序
- pandas - 根据下划线后缀中的数字对熊猫列进行排序
- makefile - Make 不遵循符号链接来查找文件