如何根据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