sql - 在R中的表中选择行的快速方法?

标签 sql r row data.table sqldf

我正在寻找一种从更大的表中提取大量行的快速方法。我的表的顶部如下:

> head(dbsnp)

      snp      gene distance
rs5   rs5     KRIT1        1
rs6   rs6   CYP51A1        1
rs7   rs7 LOC401387        1
rs8   rs8      CDK6        1
rs9   rs9      CDK6        1
rs10 rs10      CDK6        1

和尺寸:
> dim(dbsnp)
[1] 11934948        3

我想选择包含在列表中的行名的行:
> head(features)
[1] "rs1367830" "rs5915027" "rs2060113" "rs1594503" "rs1116848" "rs1835693"

> length(features)
[1] 915635

毫不奇怪,这样做的简单方法temptable = dbsnp[features,]需要相当长的时间。

我一直在寻找通过 R 中的 sqldf 包来做到这一点的方法。我认为这可能会更快。不幸的是,我不知道如何在 SQL 中选择具有某些行名的行。

谢谢。

最佳答案

data.table解决方案:

library(data.table)
dbsnp <- structure(list(snp = c("rs5", "rs6", "rs7", "rs8", "rs9", "rs10"
), gene = c("KRIT1", "CYP51A1", "LOC401387", "CDK6", "CDK6", 
"CDK6"), distance = c(1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("snp", 
"gene", "distance"), class = "data.frame", row.names = c("rs5", 
"rs6", "rs7", "rs8", "rs9", "rs10"))

DT <- data.table(dbsnp, key='snp')
features <- c('rs5', 'rs7', 'rs9')
DT[features]

   snp      gene distance
1: rs5     KRIT1        1
2: rs7 LOC401387        1
3: rs9      CDK6        1

关于sql - 在R中的表中选择行的快速方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12204171/

相关文章:

R dplyr rowwise mean 或 min 等方法?

Mysql长执行查询

sql - 带条件的窗函数

sql - 继续 - 在查询完成之前查看 FIRST_ROWS

r - 按组计算 R 中的累积总和,当组中的值总和大于最大值时重新开始

r - 使用R-当值重复少于3次时删除行

sql - 为什么 IsEqual (=) 运算符比 Oracle 中的 IsNotEqual (<>) 运算符工作得更快?

R:查找低于阈值的连续值

r - 根据多个条件创建新变量

javascript - 应用脚本 : How to know the Last Row of a Merged cell