我正在尝试使用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,这些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
答案 0 :(得分:1)
使用left_join()
将您计算出的基准合并回main_table
中:
main_table %>%
left_join(baselines, by = "PATIENT.ID")
例如参见here和here了解有关在R中合并数据的更多信息。
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 package(v0.2.0.9000)于2018-07-11创建。