如何基于R中的2个条件选择数据?

时间:2019-06-17 15:02:47

标签: r if-statement bioinformatics

我希望根据2种情况选择数据的一个子集:

首先,这是我的数据:

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)

我也尝试过:

prediction_snps = loci$AreaID[loci$label == 'unlikely']
result = loci[prediction_snps, ]

我目前还不熟悉R,所以我不确定该如何处理

3 个答案:

答案 0 :(得分:1)

我们可以尝试

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")

答案 1 :(得分:1)

base 中,您可以为仅带有标记为不太可能的基因的区域获得一个子集,其中:

operator[]

答案 2 :(得分:1)

group_by AreaID,然后过滤所有Label等于“不太可能”的地方

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