r - 在 Tidyverse 管道中使用汇总值进行归一化
问题描述
我正在尝试使用 dplyr 来分析实验数据。我当前的数据集代表五名患者。对于每位患者,有两个样品未经处理,有四个经过处理的样品。我想平均未处理的样本,然后将每个患者的所有观察值标准化为未处理样本的平均值。
我很容易获得每位患者的基线:
library(dplyr)
library(magrittr)
baselines <-main_table %>%
filter(Treatment == "N/A") %>%
group_by(PATIENT.ID) %>%
summarize(mean_CD4 = mean(CD3pos.CD8neg))
当我回到主表中变异时,引用这些值的有效方法是什么?理想情况下,能够以PATIENT.ID
某种方式过滤/选择,而不必指定实际的患者 ID,从一个实验到下一个实验会发生变化?
我一直在做的是将值从汇总表中保存出来,然后使用里面的值mutate
,但是这个解决方案是丑陋的。我真的不喜欢像这样对患者 ID 进行硬编码,因为它们会随着实验的变化而变化,并且手动更改它们会引入难以捕捉的错误。
patient_1_baseline <- baselines[[1, 2]]
patient_2_baseline <- baselines[[2, 2]]
main_table %>%
mutate(percent_of_baseline = ifelse(
PATIENT.ID == "108", CD3pos.CD8neg / patient_1_basline * 100,
ifelse(PATIENT.ID == "patient_2", ......
解决此问题的另一种方法是尝试按患者 ID 分组,summarize
获取基线,然后mutate
,但我也不太清楚如何做到这一点。
这最终是一个更大问题的症状。我已经掌握了tidyverse
基础知识,但我正在努力进入下一个层次,在那里我可以处理像这样的更复杂的情况。非常感谢有关此特定场景或全局问题的任何建议。
编辑添加:示例数据集
PATIENT.ID Dose.Day Single.Live.Lymphs CD3pos.CD8neg
1 108 Day 1 42570 24324
2 108 Day 2 36026 20842
3 108 Day 3 40449 22882
4 108 Day 4 52831 32034
5 108 N/A 71348 38340
6 108 N/A 60113 34294
解决方案
用于left_join()
将您计算的基线合并回main_table
:
main_table %>%
left_join(baselines, by = "PATIENT.ID")
在这种情况下,另一种方法也可以完全避免需要单独的基线数据集,只需添加带有分组
mutate()
的基线:
library(tidyverse)
main_table %>%
group_by(PATIENT.ID) %>%
mutate(baseline = mean(CD3pos.CD8neg[Dose.Day == "N/A"])) %>%
mutate(pctbl = CD3pos.CD8neg / baseline * 100)
#> # A tibble: 6 x 6
#> # Groups: PATIENT.ID [1]
#> PATIENT.ID Dose.Day Single.Live.Lymphs CD3pos.CD8neg baseline pctbl
#> <int> <chr> <int> <int> <dbl> <dbl>
#> 1 108 Day1 42570 24324 36317 67.0
#> 2 108 Day2 36026 20842 36317 57.4
#> 3 108 Day3 40449 22882 36317 63.0
#> 4 108 Day4 52831 32034 36317 88.2
#> 5 108 N/A 71348 38340 36317 106.
#> 6 108 N/A 60113 34294 36317 94.4
数据:
txt <- "
PATIENT.ID Dose.Day Single.Live.Lymphs CD3pos.CD8neg
1 108 Day1 42570 24324
2 108 Day2 36026 20842
3 108 Day3 40449 22882
4 108 Day4 52831 32034
5 108 N/A 71348 38340
6 108 N/A 60113 34294"
main_table <- read.table(text = txt, header = TRUE,
stringsAsFactors = FALSE)
由reprex 包(v0.2.0.9000)于 2018 年 7 月 11 日创建。
推荐阅读
- sql - 将相同的值插入到具有与其他表不同的值的表中
- r - 在 R 中使用 group_by 后的进一步数据操作
- spring - 错误 HTTP 状态 405 ?使用 GCP 负载平衡器时不允许的方法
- rest - esp32 休息分块响应
- python - mongo-connector python lib 在同步到 Elasticsearch 时不适用于事务
- python - Django Crispy Forms;不加载按钮
- python - 通过递归递增 int 变量
- reactjs - 将 formik 验证错误传递给父组件
- css - VScode markdown 预览图像大小控制 - pandoc 兼容?
- python - 刮大学橄榄球队招募排名页面