R中的ifelse语句
我正在研究10个人的基因。这个基因有两个等位基因,比如R中的ifelse语句,r,logical-operators,R,Logical Operators,我正在研究10个人的基因。这个基因有两个等位基因,比如a和b。每个等位基因有3种形式:2型、3型或4型 a <- c(2, 2, 2, 2, 3, 3, 3, 2, 4, 3) b <- c(4, 2, 3, 2, 4, 2, 3, 4, 4, 4) aEDIT:除了加和等于之外,实际上不需要ifelse或任何奇特的操作 var <- (a == 4) + (b == 4) 但是,我更喜欢使用apply的以下解决方案。下面将给出三种情况,结果是该人员拥有的4个(假设每行是一
a
和b
。每个等位基因有3种形式:2型、3型或4型
a <- c(2, 2, 2, 2, 3, 3, 3, 2, 4, 3)
b <- c(4, 2, 3, 2, 4, 2, 3, 4, 4, 4)
aEDIT:除了加和等于之外,实际上不需要ifelse或任何奇特的操作
var <- (a == 4) + (b == 4)
但是,我更喜欢使用apply
的以下解决方案。下面将给出三种情况,结果是该人员拥有的4个(假设每行是一个人)
布尔在加法下被解释为整数,所以
> FALSE + TRUE
[1] 1
4来自a还是b似乎无关紧要,因此我们最终得到三种情况:0、1和2,这取决于4的数量
var <- ifelse(a == 4, 1, 0) + ifelse(b == 4, 1, 0)
a = c(2, 2, 2, 2, 3, 3, 3, 2, 4, 3)
b = c(4, 2, 3, 2, 4, 2, 3, 4, 4, 4)
d <- cbind(a,b)
apply(d, 1, function(x) {sum(x == 4)})
> d[1, ]
a b
2 4
> d[1, ] == 4
a b
FALSE TRUE
> FALSE + TRUE
[1] 1