如何根据 R 中的 2 个条件 select 数据?
How to select data based on 2 conditions in R?
我正在寻找 select 基于 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
我希望将其子集化为 select 带有 'unlikely' 标签的基因,并且它们是否具有相同的区域 ID。但是,对于具有任何其他标签的任何其他基因,ID 也必须 而不是 存在。
所以例如我的输出只会 select 这个:
Gene AreaID Label
DNAJC12 rs1111111 unlikely
HERC4 rs1111111 unlikely
RPL12P8 rs1111111 unlikely
不包括rs333333
区域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 的新手,目前我不确定还有什么方法可以解决这个问题
我们可以试试
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 中,您可以获得 区域的子集,这些区域仅具有标记为不可能 的基因:
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
group_by AreaID
然后过滤所有 Label
等于 "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
我正在寻找 select 基于 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
我希望将其子集化为 select 带有 'unlikely' 标签的基因,并且它们是否具有相同的区域 ID。但是,对于具有任何其他标签的任何其他基因,ID 也必须 而不是 存在。
所以例如我的输出只会 select 这个:
Gene AreaID Label
DNAJC12 rs1111111 unlikely
HERC4 rs1111111 unlikely
RPL12P8 rs1111111 unlikely
不包括rs333333
区域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 的新手,目前我不确定还有什么方法可以解决这个问题
我们可以试试
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 中,您可以获得 区域的子集,这些区域仅具有标记为不可能 的基因:
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
group_by AreaID
然后过滤所有 Label
等于 "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