使用dplyr对组控件进行规范化
我的数据集包含三个因素:“行”、“dop”和“conc”。每个“行”组有四行,其中“dop”和“conc”值为“control”。下面是数据集的工作示例:使用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
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