2017-11-14 22 views
1

に基づいて1列に割り当てる値は、のは、私は次のようなデータを持っているとしましょう:R - 2つの他の列の比較

SNP eff_allele A1 A2 
rs1000000 A A G 
rs10000010 C C T 
rs1000002 T T C 
rs10000023 G T G 

私はどちらかの値をとる新しい変数、alt_alleleを作成したいです列A1またはA2のいずれかを選択します。 eff_alleleがA1に等しい場合、alt_alleleはA2の値を取得し、eff_alleleがA2に等しい場合、alt_alleleはA1の値を取得する必要があります。

試み1:

if (myData$eff_allele == myData$A1) { 
myData$alt_allele <- myData$A2 
} 
if (myData$eff_allele == myData$A2) { 
myData$alt_allele <- myData$A1 
} 

試み2:

height_fam$alt_allele[height_fam$eff_allele == height_fam$A1] <- height_fam$A2 
height_fam$alt_allele[height_fam$eff_allele == height_fam$A2] <- height_fam$A1 

これらの両方が動作しません...私が間違っているのは何私は2つの試みをしましたか?どのように私は私のデータに次の更新を達成することができます

SNP eff_allele A1 A2 alt_allele 
rs1000000 A A G G 
rs10000010 C C T T 
rs1000002 T T C C 
rs10000023 G T G T 

答えて

2
R

matlabもループを使用しないようにしよう、彼らは遅いです。問題をベクトルで解決してください。

編集:ああ、私はあなたが:)とにかく

a=read.table("a.csv", sep = " ", header = T) 
row = dim(a) 
# Number of rows 
row = row[2] 
newcol = rep("",row) 
A1 = as.character(a$A1) 
A2 = as.character(a$A2) 
eff_allele = as.character(a$eff_allele) 
# a1_ind is FALSE for index that should be equal to A1 
a1_ind = eff_allele!= A1 
newcol[a1_ind] = A1[a1_ind] 
newcol[!a1_ind] = A2[!a1_ind] 
a = cbind(a,newcol) 

をベクトルを使用していないと出力がされます、あなたの質問が間違って読んで:

  SNP eff_allele A1 A2 newcol 
1 rs1000000   A A G  G 
2 rs10000010   C C T  T 
3 rs1000002   T T C  C 
4 rs10000023   G T G  T 
+0

私はかなりまだ理解していませんあなたがそこで何をしたのですか? – Abdel

+0

@Abdel私のコードはきれいではないと思います。私はすぐにそれをきれいにしようとします。 – SirSaleh