2015-04-22 80 views
3

ifelse語句我有一個數據幀df與因子變量輸出

SNP   Effect A1 A2 
8 rs12145743 -0.0203 T G 
31 rs4650994 -0.0210 A G 
26 rs2602836  0.0192 A G 
34 rs4976033  0.0215 A G 
10 rs12525163 -0.0215 T C 
1 rs10282707 -0.0250 T C 
33 rs4917014 -0.0222 T G 
23 rs2293889 -0.0312 T G 
32 rs4871137 -0.0209 T G 
43 rs970548 -0.0258 A C 
27 rs2923084  0.0256 A G 
24 rs2303975  0.0279 A G 
36 rs499974 -0.0263 A C 
35 rs4983559 -0.0197 A G 
13 rs16942887  0.0831 A G 
16 rs17695224 -0.0290 A G 
18 rs181362 -0.0379 T C 

我創建一個新的變量new_A1將取決於Effect的價值是不同的。

如果Effect> 0,new_A1應該包含值A1

如果Effect < 0,new_A1應該包含值A2

我試圖做到這一點使用下面的ifelse語句:

df$new_A1 <- ifelse(df$Effect>0, df$A1, df$A2) 

但是,並不如預期的輸出。 new_A1包含1S和2S,而不是維持原有的變量因素值A1A2

SNP   Effect A1 A2 new_a1 
8 rs12145743 -0.0203 T G  2 
31 rs4650994 -0.0210 A G  2 
26 rs2602836  0.0192 A G  1 
34 rs4976033  0.0215 A G  1 
10 rs12525163 -0.0215 T C  1 
1 rs10282707 -0.0250 T C  1 
33 rs4917014 -0.0222 T G  2 
23 rs2293889 -0.0312 T G  2 
32 rs4871137 -0.0209 T G  2 
43 rs970548 -0.0258 A C  1 
27 rs2923084  0.0256 A G  1 
24 rs2303975  0.0279 A G  1 
36 rs499974 -0.0263 A C  1 
35 rs4983559 -0.0197 A G  2 
13 rs16942887  0.0831 A G  1 
16 rs17695224 -0.0290 A G  2 
18 rs181362 -0.0379 T C  1 
+0

將列(A1,A2)轉換爲字符類。現在,這將是因子類。然後'ifelse'可以工作。 – akrun

回答

1

處理因子變量A1A2以字符變量形式給出適當的輸出。

hdl.dir$new_A1 <- ifelse(hdl.dir$HDL_Effect<0, as.character(hdl.dir$A2), as.character(hdl.dir$new_A1))

1

你可以試試行/列的索引。即使沒有明確地將「因素」轉換爲「字符」類,這也應該起作用。

df$new_a1 <- df[3:4][cbind(1:nrow(df),(df$Effect<=0)+1L)]