首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的ifelse语句

R中的ifelse语句
EN

Stack Overflow用户
提问于 2014-08-16 22:16:04
回答 1查看 147关注 0票数 0

我在看10个人的基因。ab说,这个基因有两个等位基因。每个等位基因有3种形式: 2型、3型或4型。

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
var <- ifelse(a==4 & b==4, 2, 0)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-16 22:21:51

编辑:你实际上不需要其他的或任何花哨的操作,除了加号和等于。

代码语言:javascript
运行
复制
var <- (a == 4) + (b == 4)

如果您设置了ifelse,这可以通过

代码语言:javascript
运行
复制
var <- ifelse(a == 4, 1, 0) + ifelse(b == 4, 1, 0)

但是,我更喜欢使用apply的以下解决方案。下面将给您三个案例,结果是这个人拥有的4的数(假设每一行都是一个人)。

代码语言:javascript
运行
复制
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的第一行发生了什么。

代码语言:javascript
运行
复制
> d[1, ]
a b 
2 4

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

布尔值被解释为加法项下的整数,因此

代码语言:javascript
运行
复制
> FALSE + TRUE
[1] 1

这似乎并不重要,4来自a还是b,所以我们最终得到三个情况: 0,1和2,取决于4的数目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25344490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档