R 用于更改列值符号的多个if语句

R 用于更改列值符号的多个if语句,r,R,我尝试根据多个条件更改列值的正负号。我的数据框如下所示: DF RS Pub_SNP SNP B rs_1 G G 0.1 rs_2 C A -0.2 rs_3 A T 0.3 rs_4 T C -0.4 rs_5 T G 0.5 基于DF$Pub_SNP和DF$SNP我试图更改列DF$B,以便 (please notice, co

我尝试根据多个条件更改列值的正负号。我的数据框如下所示:

DF
RS     Pub_SNP   SNP    B
rs_1    G         G     0.1
rs_2    C         A    -0.2
rs_3    A         T     0.3
rs_4    T         C    -0.4
rs_5    T         G     0.5
基于
DF$Pub_SNP
DF$SNP
我试图更改列
DF$B
,以便

(please notice, code does not work, so just represent what im trying to achive)
DF$new_B <- ifelse(DF$pub_SNP=="C" & DF$SNP=="G" &
                   DF$pub_SNP=="C" & DF$SNP=="C" &
                   DF$pub_SNP=="G" & DF$SNP=="G", 
                   DF$B, DF$B) 
DF$new_B<- ifelse(DF$pub_SNP=="A" & DF$SNP=="T" &
                     DF$pub_SNP=="A" & DF$SNP=="A" &
                     DF$pub_SNP=="T" & DF$SNP=="T", 
                     DF$B,DF$B)
谢谢您的帮助和建议。

试试这个:

S <- c("C", "G")
W <- c("A", "T")

new.b <- function(data){
    s1 <- data[2]
    s2 <- data[3]
    b <- as.numeric(data[4])
    sw <- ifelse(sum(s1 %in% S, s2 %in% S) == 2 | sum(s1 %in% W, s2 %in% W) == 2, 1, -1)
    return(b*sw)
}

df$newB <- apply(df, 1, new.b)
# [1]  0.1  0.2  0.3  0.4 -0.5

S只要抛出正确的
ifelse
方法,因为您已经尝试过了

ifelse(DF$pub_SNP=="C" & DF$SNP=="G" |
                        DF$pub_SNP=="C" & DF$SNP=="C"|
                        DF$pub_SNP=="G" & DF$SNP=="G"| 
                        DF$pub_SNP=="A" & DF$SNP=="T" |
                        DF$pub_SNP=="A" & DF$SNP=="A" |
                        DF$pub_SNP=="T" & DF$SNP=="T", DF$B, -1*DF$B)

#[1]  0.1  0.2  0.3  0.4 -0.5

这些条件是什么?例如,
DF$pub_SNP==“C”&DF$SNP==“g”&DF$pub_SNP==“C”&DF$SNP==“C”
没有任何意义,因为
SNP
不能同时是
g
C
。这两列不是来自一个实验,因此,这可能发生在我的df中。如果两列都没有S或W,您需要更改符号吗?我想在df中创建一个新列,df$newB-具有列B的值,但具有更改的值符号您的
ifelse
语句返回相同的值,即
df$B
。没有道理。我认为你的例子误导了我,谢谢你,稍微修改一下,这正是我想要的!:)
ifelse(DF$pub_SNP=="C" & DF$SNP=="G" |
                        DF$pub_SNP=="C" & DF$SNP=="C"|
                        DF$pub_SNP=="G" & DF$SNP=="G"| 
                        DF$pub_SNP=="A" & DF$SNP=="T" |
                        DF$pub_SNP=="A" & DF$SNP=="A" |
                        DF$pub_SNP=="T" & DF$SNP=="T", DF$B, -1*DF$B)

#[1]  0.1  0.2  0.3  0.4 -0.5