我有一个数据框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
包含1和2,而不是维护原始变量A1
和A2
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 :(得分:1)
将因子变量A1
和A2
作为字符变量处理,可以得到适当的输出。
hdl.dir$new_A1 <- ifelse(hdl.dir$HDL_Effect<0, as.character(hdl.dir$A2), as.character(hdl.dir$new_A1))
答案 1 :(得分:1)
您可以尝试row / col索引。这甚至可以在没有明确转换因素的情况下发挥作用。到了角色&#39;类。
df$new_a1 <- df[3:4][cbind(1:nrow(df),(df$Effect<=0)+1L)]