我有以下data.frame:
A1 A2 EFF FRQ G1 G2
A G 0.0125 0.4578 A G
T C 0.0143 0.1293 C C
T C -0.017 0.8984 T T
A G -0.018 0.8945 A G
A G -0.009 0.8652 A A
A G 0.0001 0.3931 G G
效果(EFF)和频率(FRQ)与A1有关。我想计算我的G1和G2的总和。例如,在第一行中,如果G1 = A1,则其效果为0.0125。但是,如果G1 = A2,那么我想翻转效果的符号并将其设为-0.125。如果G2 = A1,我希望G2的效果为0.0125。如果G2 = A2,那么我希望G2的效果为-0.125。我想创建一列“G1 + G2效果”。
在第一行中,由于G1 = A2,所以G1的效果为0.0125。由于G2 = A2,因此G2的效果为-0.0125。因此,在新列“G1 + G2效果”中,总和为0。在第二行中,G1 = A2,因此G1的效果为-0.0143,并且G2 = A2也是,因此G2的效果也为-0.0143。因此,“G1 + G2效果”列将显示为:-0.0286。
这是我希望我的输出看起来像的样子:
A1 A2 EFF FRQ G1 G2 G1+G2_Effects
A G 0.0125 0.4578 A G 0
T C 0.0143 0.1293 C C -0.0286
T C -0.017 0.8984 T T -0.034
A G -0.018 0.8945 A G 0
A G -0.009 0.8652 A A -0.018
A G 0.0001 0.3931 G G -0.0002
最佳答案
基本上,您只是在计算G1或G2与A1匹配的次数减去G1或G2与A2匹配的次数,然后将该数字乘以EFF。您可以使用R中的算术运算符执行此操作:
dat$G1G2Effect <- with(dat, ((G1==A1) + (G2==A1) - (G1==A2) - (G2==A2))*EFF)
dat
# A1 A2 EFF FRQ G1 G2 G1G2Effect
# 1 A G 0.0125 0.4578 A G 0.0000
# 2 T C 0.0143 0.1293 C C -0.0286
# 3 T C -0.0170 0.8984 T T -0.0340
# 4 A G -0.0180 0.8945 A G 0.0000
# 5 A G -0.0090 0.8652 A A -0.0180
# 6 A G 0.0001 0.3931 G G -0.0002
数据:
dat <- read.table(text="A1 A2 EFF FRQ G1 G2
A G 0.0125 0.4578 A G
T C 0.0143 0.1293 C C
T C -0.017 0.8984 T T
A G -0.018 0.8945 A G
A G -0.009 0.8652 A A
A G 0.0001 0.3931 G G", header=TRUE, stringsAsFactors=FALSE)
关于r - 如何计算R中的加权和?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44622071/