带有因子变量输出的ifelse语句

时间:2015-04-22 15:35:48

标签: r if-statement

我有一个数据框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,而不是维护原始变量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

2 个答案:

答案 0 :(得分:1)

将因子变量A1A2作为字符变量处理,可以得到适当的输出。

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)]