繁体   English   中英

R中的ifelse语句

[英]ifelse statement in R

我正在寻找10个人中的一个基因。 这个基因有两个等位基因,例如ab 每个等位基因有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)

我希望编写一个变量,告诉我该人有多少个4类等位基因:0、1或2。

var <- ifelse(a==4 & b==4, 2, 0)

上面的代码不起作用,因为我没有考虑只有一个4型等位基因副本的个体。 我觉得我可能需要2个同时工作的ifelse语句?

编辑:您实际上不需要ifelse或加号和等于号以外的任何花式操作。

var <- (a == 4) + (b == 4)

如果您设置为ifelse ,则可以使用

var <- ifelse(a == 4, 1, 0) + ifelse(b == 4, 1, 0)

但是,我更喜欢以下使用apply解决方案。 以下将给您三种情况,结果是此人拥有的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)

d <- cbind(a,b)

apply(d, 1, function(x) {sum(x == 4)})

对于此操作,我首先将两个向量合并到一个矩阵中,因为这使应用该函数更加容易。 在R中,通常,如果数据是相同类型,则将数据组合成矩阵/数据框/等时比较容易(对于计算机而言更快),然后创建要在每行/列/等上执行的功能。

要了解输出,请考虑d的第一行会发生什么。

> d[1, ]
a b 
2 4

> d[1, ] == 4
a     b 
FALSE  TRUE

布尔值在加法运算中被解释为整数,因此

> FALSE + TRUE
[1] 1

看起来4是来自a还是b似乎都没有关系,所以我们最终得出三种情况:0、1和2,具体取决于4的数目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM