Как выбрать данные на основе 2 условий в R? - PullRequest
1 голос
/ 17 июня 2019

Я хочу выбрать подмножество моих данных на основе 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

Я ищу подмножество этого, чтобы выбрать геныс меткой «маловероятно» и если они имеют одинаковый идентификатор области.Однако идентификатор также должен , а не присутствовать для любых других генов с любой другой меткой.

Так, например, мой вывод выбрал бы только это:

Gene          AreaID      Label
DNAJC12     rs1111111   unlikely
HERC4       rs1111111   unlikely
RPL12P8     rs1111111   unlikely

и не включал бы идентификатор области rs333333, который маловероятен с повторяющимися идентификаторами, но также имеет гены различных меток.

По сути, я ищу подмножество для областей, в которых только гены помечены как маловероятные.

Я попытался, основываясь на прочтении похожих вопросов здесь, но, похоже, это не работает:

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 ]

1 голос
/ 17 июня 2019

В base вы можете получить подмножество для областей, в которых гены помечены как маловероятные с:

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
1 голос
/ 18 июня 2019

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
1 голос
/ 17 июня 2019

Мы можем попробовать

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...