如何解决使用双条件
我目前正在尝试创建一个双重条件,如果我的数据框“模型”的癌症类型(指示)和基因(基因)都出现在另一个名为“cpg”的数据框中,那么一个新列在模型表中,如果两个条件都满足,则为“是”,否则为“否”。为了说明这一点:
模型表有:
指示 | 基因 |
---|---|
急性髓系白血病 | TP53 |
急性髓系白血病 | GNAQ |
cpg 数据框有:
癌症类型 | 基因 |
---|---|
急性髓系白血病 | TP53 |
急性髓系白血病 | ATM |
我想制作一个看起来像这样的模型表(基于 cpg 数据):
指示 | 基因 | 热点? |
---|---|---|
急性髓系白血病 | TP53 | 是 |
急性髓系白血病 | GNAQ | 没有 |
到目前为止,我已经尝试(但失败了)使用条件创建一个向量的 for 循环,希望然后将此向量作为新列附加:
hotspot <- c()
for (i in 1:nrow(mockup)){
if ((mockup$Genes[i] == cpg$Gene && mockup$Indication[i] == cpg$`Cancer Type`)){
hotspot[i] <- print("yes")
} else {
hotspot[i] <- print("no")
}
}
unique(hotspot)
与往常一样,任何帮助都将不胜感激!
解决方法
这是必需的吗? R 中的 for 循环,因为 R 已经向量化,通常是可以避免的。
- 基础 R 版本
mockup <- read.table(text = 'Indication Genes
"Acute Myeloid Leukemia" TP53
"Acute Myeloid Leukemia" GNAQ',header = T)
cpg <- read.table(text = "Cancer_Type Gene
'Acute Myeloid Leukemia' TP53
'Acute Myeloid Leukemia' ATM",header = T)
mockup$hotspot <- apply(mockup,1,function(x) c('No','Yes')[(all(x %in% as.matrix(cpg)))
mockup
Indication Genes hotspot
1 Acute Myeloid Leukemia TP53 Yes
2 Acute Myeloid Leukemia GNAQ No
dplyr
管道友好版本
library(dplyr)
mockup %>% rowwise() %>%
mutate(hotspot = c('No','Yes')[+(all(cur_data() %in% as.matrix(cpg))+1)])
#> # A tibble: 2 x 3
#> # Rowwise:
#> Indication Genes hotspot
#> <chr> <chr> <chr>
#> 1 Acute Myeloid Leukemia TP53 Yes
#> 2 Acute Myeloid Leukemia GNAQ No
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。