用plyr通过各组中的对照条件进行标准化

时间:2016-11-22 16:05:14

标签: r dplyr plyr

我有以下格式的一组数据:

     Rep Day      Drug   GFP_per_cell
1      1  3d      CTRL            2.0
2      1  3d         A            1.0
3      1  3d         B            4.0
4      2  3d      CTRL            3.0
5      2  3d         A            6.0
...

我想将每个重复(Rep)归一化到控件(CTRL) - 即通过控件划分每个重复的所有值 - 以提供如下数据帧:

     Rep Day      Drug   GFP_per_cell
1      1  3d      CTRL            1.0
2      1  3d         A            0.5
3      1  3d         B            2.0
4      2  3d      CTRL            1.0
5      2  3d         A            2.0
...

我一直试图用dplyr中的mutate函数来做这个,这是我的尝试:

df %>% 
  group_by(Rep) %>% 
  mutate(df = GFP_per_cell / filter(Inhibitor == "CTRL")[,GFP_per_cell])

但这给了我错误:

Error: no applicable method for 'filter_' applied to an object of class "logical"

我如何要求mutate除以每组中的'CRTL'条件?

1 个答案:

答案 0 :(得分:2)

如果每个'Rep'组只有一个'CTRL',那么将'Drug'中的'GFP_per_cell'对应于'CTRL'(通过转换为逻辑向量)并使用它来标准化'GFP_per_cell'

df %>% 
    group_by(Rep) %>%
    mutate(GFP_per_cell = GFP_per_cell/GFP_per_cell[Drug=="CTRL"])
#   Rep   Day  Drug GFP_per_cell
#  <int> <chr> <chr>        <dbl>
#1     1    3d  CTRL          1.0
#2     1    3d     A          0.5
#3     1    3d     B          2.0
#4     2    3d  CTRL          1.0
#5     2    3d     A          2.0