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