【发布时间】:2018-07-11 09:45:36
【问题描述】:
我正在尝试使用 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
【问题讨论】:
-
请分享(部分)您的示例数据。
-
@MauritsEvers 表示共享为 包含在您的问题中,以便其他人可以运行它。请参阅 here 了解出色的示例。
-
我编辑了这个问题,因为它在 cmets 中看起来很糟糕,谢谢