用 plyr 在每组中通过控制条件进行归一化

Normalising by control condition in each group with 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' 条件?

如果每组 'Rep' 只有一个 'CTRL',则子集 'GFP_per_cell' 对应于 'Drug' 中的 '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