2017-06-19 6 views
2

Iは、以下のdata.frameを有する:Rの加重和の計算方法は?

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 Effects」では、合計は0になります.2番目の行では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 

答えて

3

基本的にはあなただけの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) 
1

別のアプローチ:

zz = ' 
    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 
    ' 


df$cEFF = NA 
df$cEFF = ifelse(as.character(df$G1) == as.character(df$A1), df$EFF, -df$EFF) + 
      ifelse(as.character(df$G2) == as.character(df$A2), -df$EFF, df$EFF) 

df 

    A1 A2  EFF FRQ G1 G2 cEFF 
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 
1

シンプルifelse条件

> so$t1=ifelse(so$G1==so$A1,so$EFF,-so$EFF)+ifelse(so$G2==so$A1,so$EFF,-so$EFF) 
> so 
    A1 A2  EFF FRQ G1 G2  t1 
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 
関連する問題