如何根据R中的两个条件选择数据?
我希望根据以下两个条件选择我的数据子集: 首先,这是我的数据:如何根据R中的两个条件选择数据?,r,if-statement,bioinformatics,R,If Statement,Bioinformatics,我希望根据以下两个条件选择我的数据子集: 首先,这是我的数据: Gene AreaID Label DNAJC12 rs1111111 unlikely HERC4 rs1111111 unlikely RP11-57G10.8 rs2222222 possible RPL12P8 rs1111111 unlikely SIRT1 rs3333333 certain RP11-57G10.8 rs3333333
Gene AreaID Label
DNAJC12 rs1111111 unlikely
HERC4 rs1111111 unlikely
RP11-57G10.8 rs2222222 possible
RPL12P8 rs1111111 unlikely
SIRT1 rs3333333 certain
RP11-57G10.8 rs3333333 possible
RPL12P8 rs3333333 unlikely
SIRT1 rs3333333 unlikely
我希望以此子集来选择具有“不太可能”标签的基因,如果它们具有相同的区域ID。但是,对于具有任何其他标签的任何其他基因,ID也必须不存在
例如,我的输出只会选择以下选项:
Gene AreaID Label
DNAJC12 rs1111111 unlikely
HERC4 rs1111111 unlikely
RPL12P8 rs1111111 unlikely
不包括rs333333区域ID,该区域ID不太可能具有重复ID,但也具有不同标签的基因
基本上,我在寻找那些只有被标记为不太可能的基因的区域的子集
我在这里阅读了类似的问题,但这似乎不起作用:
loci <- read.csv('dataset.csv')
sub_list <- lapply(1:length(loci), function(i) loci %>% filter(loci$AreaID==duplicated(loci) & loci$Label =='unlikely'))
do.call(rbind, sub_list)
我不知道还有什么方法可以做到这一点,因为我是R新手,目前我们可以试试
library(dplyr)
df1 %>%
filter(AreaID != "rs3333333") %>%
filter(Label == "unlikely")
# Gene AreaID Label
#1 DNAJC12 rs1111111 unlikely
#2 HERC4 rs1111111 unlikely
#3 RPL12P8 rs1111111 unlikely
也可能是
df1 %>% group_by(AreaID) %>% filter(first(Label) == "unlikely")
在base中,您可以得到只有标记为不太可能的基因的区域的子集:
按AreaID分组,然后过滤所有标签等于
library(dplyr)
df %>% group_by(AreaID) %>% filter(all(Label=="unlikely"))
# A tibble: 3 x 3
# Groups: AreaID [1]
Gene AreaID Label
<chr> <chr> <chr>
1 DNAJC12 rs1111111 unlikely
2 HERC4 rs1111111 unlikely
3 RPL12P8 rs1111111 unlikely
请勿在dplyr函数中使用$。duplicated返回TRUE或FALSE,因此AreaID==duplicatedloci正在测试轨迹重复时AreaID是否为TRUE,轨迹唯一或第一次出现时AreaID是否为FALSE。因为AreaID不是t/F,所以这不起作用。我只是想帮助你理解为什么你的尝试不起作用。谢谢你,我试着阅读了有关函数的内容,但没有发现我的资源非常清楚,所以这很有帮助谢谢你的回答。不幸的是,虽然这个输出只给出了不太可能的基因,但它仍然给出了那个些和我的原著中其他不同标记的基因共享一个区域ID的基因data@DN1您现在可以检查输出了吗谢谢,第一个仅适用于示例数据集。不幸的是,我的数据要大得多,我无法知道要在第一个过滤器中设置的区域ID。第二个解决方案还提供了与第一条注释类似的输出。但是,我将尝试从您给出的第一个示例开始,看看我是否可以得到我需要的,所以谢谢您。谢谢您,不幸的是,我得到的第一行设置tt为:Error in`[.data.frame`WithUniqueLocals,aggregatecbindn=rep1,:未定义列Selected谢谢这没有错误,只选择带有不太可能的标签的基因,但不幸的是,仍然选择那些带有AreaID的基因,这也与其他标签的基因共享,但谢谢你,我将尝试从中扩展。
loci <- read.table(header = TRUE, text="Gene AreaID Label
DNAJC12 rs1111111 unlikely
HERC4 rs1111111 unlikely
RP11-57G10.8 rs2222222 possible
RPL12P8 rs1111111 unlikely
SIRT1 rs3333333 certain
RP11-57G10.8 rs3333333 possible
RPL12P8 rs3333333 unlikely
SIRT1 rs3333333 unlikely")
#Get AreaID where all are labelled unlikely
tt <- aggregate(cbind(all=Label=="unlikely") ~ AreaID, data=loci, FUN=all)
#Merge with those AreaID's to get Genes
merge(loci, tt[tt$all,]["AreaID"])
# AreaID Gene Label
#1 rs1111111 DNAJC12 unlikely
#2 rs1111111 HERC4 unlikely
#3 rs1111111 RPL12P8 unlikely
library(dplyr)
df %>% group_by(AreaID) %>% filter(all(Label=="unlikely"))
# A tibble: 3 x 3
# Groups: AreaID [1]
Gene AreaID Label
<chr> <chr> <chr>
1 DNAJC12 rs1111111 unlikely
2 HERC4 rs1111111 unlikely
3 RPL12P8 rs1111111 unlikely