使用dplyr对组控件进行规范化

使用dplyr对组控件进行规范化,r,dplyr,data-wrangling,R,Dplyr,Data Wrangling,我的数据集包含三个因素:“行”、“dop”和“conc”。每个“行”组有四行,其中“dop”和“conc”值为“control”。下面是数据集的工作示例: line;dop;conc;prol a;undop;100;0,1540 a;undop;100;0,2770 a;undop;100;0,2460 a;0,0175;100;0,2030 a;0,0175;100;0,1630 a;0,0175;100;0,2300 a;0,015;100;0,2960 a;0,015;100;0,107

我的数据集包含三个因素:“行”、“dop”和“conc”。每个“行”组有四行,其中“dop”和“conc”值为“control”。下面是数据集的工作示例:

line;dop;conc;prol
a;undop;100;0,1540
a;undop;100;0,2770
a;undop;100;0,2460
a;0,0175;100;0,2030
a;0,0175;100;0,1630
a;0,0175;100;0,2300
a;0,015;100;0,2960
a;0,015;100;0,1070
a;0,015;100;0,2450
a;0,013;100;0,1890
a;0,013;100;0,2910
a;0,013;100;0,2490
a;0,02;100;0,1250
a;0,02;100;0,2910
a;0,02;100;0,2650
a;0,01;100;0,2040
a;0,01;100;0,1030
a;0,01;100;0,1100
a;0,005;100;0,1770
a;0,005;100;0,2890
a;0,005;100;0,1920
a;0,001;100;0,2820
a;0,001;100;0,2480
a;0,001;100;0,1320
a;control;control;0,1640
a;undop;10;0,2920
a;undop;10;0,2580
a;undop;10;0,1900
a;0,0175;10;0,2060
a;0,0175;10;0,2860
a;0,0175;10;0,1010
a;0,015;10;0,2720
a;0,015;10;0,1300
a;0,015;10;0,2720
a;0,013;10;0,2760
a;0,013;10;0,2910
a;0,013;10;0,2630
a;0,02;10;0,1900
a;0,02;10;0,2710
a;0,02;10;0,1770
a;0,01;10;0,2980
a;0,01;10;0,2580
a;0,01;10;0,1500
a;0,005;10;0,3000
a;0,005;10;0,2510
a;0,005;10;0,1990
a;0,001;10;0,1270
a;0,001;10;0,2040
a;0,001;10;0,2860
a;control;control;0,1300
a;undop;1;0,2780
a;undop;1;0,1250
a;undop;1;0,2710
a;0,0175;1;0,1000
a;0,0175;1;0,2920
a;0,0175;1;0,2340
a;0,015;1;0,1620
a;0,015;1;0,1230
a;0,015;1;0,2770
a;0,013;1;0,1330
a;0,013;1;0,1880
a;0,013;1;0,2530
a;0,02;1;0,1410
a;0,02;1;0,1720
a;0,02;1;0,1780
a;0,01;1;0,2190
a;0,01;1;0,1650
a;0,01;1;0,1260
a;0,005;1;0,1210
a;0,005;1;0,1200
a;0,005;1;0,1160
a;0,001;1;0,1720
a;0,001;1;0,1320
a;0,001;1;0,2410
a;control;control;0,2590
a;undop;0,1;0,1880
a;undop;0,1;0,2340
a;undop;0,1;0,1950
a;0,0175;0,1;0,1630
a;0,0175;0,1;0,1190
a;0,0175;0,1;0,2250
a;0,015;0,1;0,2520
a;0,015;0,1;0,2890
a;0,015;0,1;0,2150
a;0,013;0,1;0,2850
a;0,013;0,1;0,1350
a;0,013;0,1;0,2550
a;0,02;0,1;0,2810
a;0,02;0,1;0,1810
a;0,02;0,1;0,2000
a;0,01;0,1;0,1320
a;0,01;0,1;0,2730
a;0,01;0,1;0,2570
a;0,005;0,1;0,1740
a;0,005;0,1;0,1830
a;0,005;0,1;0,2910
a;0,001;0,1;0,2580
a;0,001;0,1;0,1500
a;0,001;0,1;0,1480
a;control;control;0,2870
b;undop;100;0,2530
b;undop;100;0,1860
b;undop;100;0,1820
b;0,0175;100;0,2850
b;0,0175;100;0,1620
b;0,0175;100;0,2130
b;0,015;100;0,2900
b;0,015;100;0,2610
b;0,015;100;0,1900
b;0,013;100;0,1030
b;0,013;100;0,2650
b;0,013;100;0,2640
b;0,02;100;0,1580
b;0,02;100;0,2470
b;0,02;100;0,2730
b;0,01;100;0,2280
b;0,01;100;0,1850
b;0,01;100;0,2340
b;0,005;100;0,1170
b;0,005;100;0,2370
b;0,005;100;0,1160
b;0,001;100;0,2830
b;0,001;100;0,1560
b;0,001;100;0,1330
b;control;control;0,1410
b;undop;10;0,3000
b;undop;10;0,1430
b;undop;10;0,2910
b;0,0175;10;0,2350
b;0,0175;10;0,2500
b;0,0175;10;0,2100
b;0,015;10;0,1210
b;0,015;10;0,2220
b;0,015;10;0,1360
b;0,013;10;0,2070
b;0,013;10;0,2650
b;0,013;10;0,1450
b;0,02;10;0,2090
b;0,02;10;0,1060
b;0,02;10;0,2520
b;0,01;10;0,1700
b;0,01;10;0,2550
b;0,01;10;0,1570
b;0,005;10;0,1430
b;0,005;10;0,1060
b;0,005;10;0,1740
b;0,001;10;0,1980
b;0,001;10;0,1090
b;0,001;10;0,2330
b;control;control;0,2650
b;undop;1;0,2320
b;undop;1;0,2470
b;undop;1;0,2070
b;0,0175;1;0,2610
b;0,0175;1;0,2090
b;0,0175;1;0,1250
b;0,015;1;0,2780
b;0,015;1;0,2190
b;0,015;1;0,2720
b;0,013;1;0,1500
b;0,013;1;0,2400
b;0,013;1;0,2000
b;0,02;1;0,1780
b;0,02;1;0,1320
b;0,02;1;0,1680
b;0,01;1;0,1430
b;0,01;1;0,1660
b;0,01;1;0,2370
b;0,005;1;0,2040
b;0,005;1;0,2870
b;0,005;1;0,2710
b;0,001;1;0,1460
b;0,001;1;0,1150
b;0,001;1;0,2070
b;control;control;0,2200
b;undop;0,1;0,2680
b;undop;0,1;0,2620
b;undop;0,1;0,2510
b;0,0175;0,1;0,2100
b;0,0175;0,1;0,2980
b;0,0175;0,1;0,1740
b;0,015;0,1;0,2320
b;0,015;0,1;0,1230
b;0,015;0,1;0,2800
b;0,013;0,1;0,1830
b;0,013;0,1;0,1940
b;0,013;0,1;0,2580
b;0,02;0,1;0,2120
b;0,02;0,1;0,2820
b;0,02;0,1;0,1780
b;0,01;0,1;0,2470
b;0,01;0,1;0,2500
b;0,01;0,1;0,2760
b;0,005;0,1;0,1780
b;0,005;0,1;0,1880
b;0,005;0,1;0,1350
b;0,001;0,1;0,1260
b;0,001;0,1;0,2580
b;0,001;0,1;0,2840
b;control;control;0,1880
我想要的是,将每个“dop”和“conc”行的prol变量的每个值与我前面提到的四个控制值的平均值进行归一化

基本上,您应该将a行的每个“prol”值除以其控件的prol值的平均值,然后将其乘以100。即。: 属于A行的控件的平均值为:

  line  dop     conc     prol
  <chr> <chr>   <chr>   <dbl>
1 a     control control 0.164
2 a     control control 0.13 
3 a     control control 0.259
4 a     control control 0.287
行dop conc prol
1 a控制0.164
2 a控制0.13
3 a控制0.259
4 a控制0.287
(01640+01300+02590+02870)/4=0.21

现在,A行的每个prol值应除以该数字并乘以100:

   line  dop    conc   prol
   <chr> <chr>  <chr> <dbl>
 1 a     undop  100   0.154
 2 a     undop  100   0.277
行dop conc prol
1观察员部队100 0.154
2观察员部队100 0.277
0.1540/0.21x100=73.33

0.2770/0.21x100=131.9

等等

B行也应如此

通过以下几行,我成功地做到了这一点,但它只规范化了与控件对应的数据,并跳过了与其余“dopaje”和“concentracion”级别对应的所有有用数据:

dummy%>%
分组依据(行)%>%
过滤器(dop==“控制”)%>%
变异(ctrl=prol/平均值(prol)*100)
#一个tibble:8x5
#分组:第[2]行
行dop conc prol ctrl
1 a控制0.164 78.1
2 a控制0.13 61.9
3 a控件0.259 123。
4 a控制0.287 137。
5 b控制0.141 69.3
6b控制0.265 130。
7b控制0.22 108。
8 b控制0.188 92.4
您可以看到,ctrl列现在显示已成功计算的值,但它仅显示控件值,跳过所有有用的其余数据

我如何将突变扩展到所有行,而不仅仅是“控制”行?我尝试过使用“cur_data()”,这似乎是dplyr中的一个新特性,但没有成功地使其工作

提前多谢


JP.

我认为这适用于您的数据集。为此,我首先计算分组平均值,然后按行将每个
prol
除以:

library(dplyr)

df %>%
  group_by(linea) %>%
  mutate(avg_prol = mean(prol)) %>%
  rowwise() %>%
  mutate(ctrl = (prol / avg_prol) * 100) %>%
  select(-avg_prol)

# A tibble: 16 x 6
# Rowwise:  linea
   linea        dopaje  concentracion  prol prol_norm  ctrl
   <chr>        <chr>   <chr>         <dbl>     <dbl> <dbl>
 1 fibroblastos control control       0.26       98.7  98.7
 2 fibroblastos control control       0.262      99.4  99.4
 3 fibroblastos control control       0.284     108   108. 
 4 fibroblastos control control       0.248      94.1  94.1
 5 a375         control control       0.851     100   100. 
 6 a375         control control       0.821      96.8  96.8
 7 a375         control control       0.912     108   108. 
 8 a375         control control       0.809      95.4  95.4
 9 hela         control control       0.457     107   107. 
10 hela         control control       0.38       88.6  88.6
11 hela         control control       0.432     101   101. 
12 hela         control control       0.447     104   104. 
13 mcf7         control control       0.294     100   100. 
14 mcf7         control control       0.258      88.2  88.1
15 mcf7         control control       0.286      97.7  97.6
16 mcf7         control control       0.334     114   114. 

库(dplyr)
df%>%
按(线性)分组%>%
变异(平均prol=平均(prol))%>%
行()
变异(ctrl=(prol/avg_prol)*100)%>%
选择(-avg_prol)
#一个tibble:16x6
#行:直线
数据线-数据集中程序-数据范数控制
1成纤维细胞对照组0.2698.798.7
2成纤维细胞对照组0.262 99.4 99.4
3成纤维细胞对照组0.284 108。
4成纤维细胞对照组0.248 94.1 94.1
5 a375控制装置0.851100。
6 a375控制0.821 96.8 96.8
7 a375控制装置0.912 108。
8 a375控制0.809 95.4 95.4
9直升机控制组0.457 107。
10直升机控制系统0.38 88.6 88.6
11直升机控制系统0.432 101。
12直升机控制系统0.447 104。
13 mcf7控制0.2941000。
14 mcf7控制0.258 88.2 88.1
15 mcf7控制0.286 97.7 97.6
16 mcf7控制0.334 114。
数据:


df解决这个问题最简单、最简洁的方法是:

dummy%>%
分组依据(行)%>%
变异(ctrl=prol/mean(prol[dop==“control”])*100)
#一个tibble:200x5
#分组:第[2]行
行dop conc prol ctrl
1观察员部队100 0.154 73.3
2观察员部队100 0.277 132。
3观察员部队100 0.246 117。
4 a 00175 100 0.203 96.7
5 a 00175 100 0.163 77.6
6 a 00175 100 0.23 110。
7 a 0015 100 0.296 141。
8 a 0015 100 0.107 51.0
9 a 0015 100 0.245 117。
10 a 0013 100 0.189 90
# ... 还有190行

您在
控件上应用过滤器的第二个数据集似乎正常,您希望输出如何?我希望输出显示在第二个数据集中,但我显示的输出是用excel生成的。我希望输出,但使用R。我通常通过创建一个数据帧来处理这个问题,该数据帧包含我希望使用
过滤器
分组依据
,和
汇总
,以及
左键将其连接回原始数据帧的值。然后可以使用mutate来计算prol_范数。如果你能发布一些数据,我们会更有帮助。将
(dput(df))
的输出复制到您的问题中。感谢您的输入!在这篇文章的开头我已经有了一份我的数据报告。你应该能够做到:)不幸的是,这是我已经取得的成就。仅对先前筛选的行进行变异。我想将突变应用到属于linea组的所有行(不仅仅是对照组)。我在这里有点困惑,但如果你分享一个未过滤的数据摘录,我们可能会更好地帮助你。再次您好,非常感谢您的耐心。我已经更新了帖子,希望你现在能更好地理解它。您已经有了我的数据集的随机摘录(这是第二个)。再次感谢!没关系,我只需要你的原始数据中可复制的一部分。另一个问题是dopaje和concentracion列是字符和数字向量的混合体,会自动强制转换为字符向量。
library(dplyr)

df %>%
  group_by(linea) %>%
  mutate(avg_prol = mean(prol)) %>%
  rowwise() %>%
  mutate(ctrl = (prol / avg_prol) * 100) %>%
  select(-avg_prol)

# A tibble: 16 x 6
# Rowwise:  linea
   linea        dopaje  concentracion  prol prol_norm  ctrl
   <chr>        <chr>   <chr>         <dbl>     <dbl> <dbl>
 1 fibroblastos control control       0.26       98.7  98.7
 2 fibroblastos control control       0.262      99.4  99.4
 3 fibroblastos control control       0.284     108   108. 
 4 fibroblastos control control       0.248      94.1  94.1
 5 a375         control control       0.851     100   100. 
 6 a375         control control       0.821      96.8  96.8
 7 a375         control control       0.912     108   108. 
 8 a375         control control       0.809      95.4  95.4
 9 hela         control control       0.457     107   107. 
10 hela         control control       0.38       88.6  88.6
11 hela         control control       0.432     101   101. 
12 hela         control control       0.447     104   104. 
13 mcf7         control control       0.294     100   100. 
14 mcf7         control control       0.258      88.2  88.1
15 mcf7         control control       0.286      97.7  97.6
16 mcf7         control control       0.334     114   114. 

df <- tribble(
  ~linea,        ~dopaje,  ~concentracion,  ~prol, ~prol_norm,
 "fibroblastos", "control", "control",       0.260,      98.7,
 "fibroblastos", "control", "control",       0.262,      99.4,
 "fibroblastos", "control", "control",       0.284,     108., 
 "fibroblastos", "control", "control",       0.248,      94.1,
 "a375",         "control", "control",       0.851,     100., 
 "a375",         "control", "control",       0.821,      96.8,
 "a375",         "control", "control",       0.912,     108., 
 "a375",         "control", "control",       0.809,      95.4,
 "hela",         "control", "control",       0.457,     107., 
 "hela",         "control", "control",       0.38,       88.6,
 "hela",         "control", "control",       0.432,     101., 
 "hela",         "control", "control",       0.447,     104., 
 "mcf7",         "control", "control",       0.294,     100., 
 "mcf7",         "control", "control",       0.258,     88.2,
 "mcf7",         "control", "control",       0.286,      97.7,
 "mcf7",         "control", "control",       0.334,     114.
)
dummy %>%
    group_by(line) %>%
    mutate(ctrl=prol/mean(prol[dop=="control"])*100)

# A tibble: 200 x 5
# Groups:   line [2]
   line  dop    conc   prol  ctrl
   <chr> <chr>  <chr> <dbl> <dbl>
 1 a     undop  100   0.154  73.3
 2 a     undop  100   0.277 132. 
 3 a     undop  100   0.246 117. 
 4 a     0,0175 100   0.203  96.7
 5 a     0,0175 100   0.163  77.6
 6 a     0,0175 100   0.23  110. 
 7 a     0,015  100   0.296 141. 
 8 a     0,015  100   0.107  51.0
 9 a     0,015  100   0.245 117. 
10 a     0,013  100   0.189  90  
# ... with 190 more rows