首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >data.table:获取每个组的索引\ data.table

data.table:获取每个组的索引\ data.table
EN

Stack Overflow用户
提问于 2021-01-14 18:18:22
回答 2查看 52关注 0票数 0

我在data.table表单中有两个数据帧。其中一个是分组数据,我希望从第二个data.table框架中提取值的索引。以下是样本数据

代码语言:javascript
复制
snp_bygene<-data.table(V2=c("SNP1","SNP2","SNP3","SNP4","SNP5","SNP11","SNP12","SNP13","SNP14","SNP15"),
GENE=c( rep("GENE1",5),rep("GENE2",5) ),START=c(rep(100,5),rep(200,5)),END=c(rep(190,5),rep(290,5)) )

snp_data<-data.table(V2=c("SNP1","SNP2","SNP3","SNP4","SNP5","SNP11","SNP12","SNP13","SNP14","SNP15"),BP=c(101,102,105,110,125,201,202,205,210,225))

我想为V2在snp_bygene中获得snp_data V2匹配的索引。每一个基因我想得到SNP的位置。

代码语言:javascript
复制
setkey(snp_data, V2)
snp_bygene[snp_data]

我该怎么做?

最后的输出如下:

finalindex_perGene<-list("GENE1"=c(1, 2, 3, 4, 5) , "GENE2" =c(6, 7, 8, 9, 10))

编辑1:在GENE中没有snp_data

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-14 18:28:10

我们可以做一个非equi连接on 'START‘、'END’列与'BP‘和equi连接'V2',获得带有.I的行索引,在list中追加'GENE’列,然后在list中添加‘split .I’(I是为.I创建的默认列名,因为我们没有指定任何列名--它可以由.(I = .I, GENE)显式表示),由‘split’表示。

代码语言:javascript
复制
with(snp_bygene[snp_data, .(.I, GENE), on = .(V2, START <= BP, 
       END >= BP)], split(I, GENE))

-output

代码语言:javascript
复制
#$GENE1
#[1] 1 2 3 4 5

#$GENE2
#[1]  6  7  8  9 10
票数 2
EN

Stack Overflow用户

发布于 2021-01-14 20:22:54

如果不涉及BP合并数据表(即,仅取决于V2 ),我们可以使用chmatch获取匹配的行索引,例如,

代码语言:javascript
复制
> with(snp_bygene, split(chmatch(snp_bygene[, V2], snp_data[, V2]), GENE))
$GENE1
[1] 1 2 3 4 5

$GENE2
[1]  6  7  8  9 10

否则,您可能需要非equi和equi连接作为@akrun did

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65724707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档