R:如何在数据帧中查找和提取值

R:如何在数据帧中查找和提取值,r,bioinformatics,R,Bioinformatics,我在R中有一个字符向量,有330000个值,例如 amp184660 amp947 amp53303 amp364886 amp121615 和这样的数据框: 我想在数据框的第一列中找到我的字符向量中的每个值,即“分析名称”,然后将其相应的染色体位置,即“色度”输出到一个新的向量中。我想尽快做到这一点,因为有大约330k的条目,通过grep在一个循环中完成这一点大约需要12个小时 有什么想法吗? 谢谢 Jason.#假设df称为数据帧,向量称为字符向量 vector_frame我建议%中的%,

我在R中有一个字符向量,有330000个值,例如

amp184660
amp947
amp53303
amp364886
amp121615

和这样的数据框:

我想在数据框的第一列中找到我的字符向量中的每个值,即“分析名称”,然后将其相应的染色体位置,即“色度”输出到一个新的向量中。我想尽快做到这一点,因为有大约330k的条目,通过grep在一个循环中完成这一点大约需要12个小时

有什么想法吗? 谢谢 Jason.

#假设df称为数据帧,向量称为字符向量

vector_frame我建议%
中的
%,这可能比
合并
更快。下面是一个玩具示例:

## Assume that "x" is your data.frame
set.seed(1)
x <- data.frame(Assay = sample(letters, 30, replace = TRUE), 
                Chrom = 4, ChromPos = rnorm(30))

## And that "y" is your vector you want to match
y <- c("a", "b", "c", "d", "e")

## Here's how you can use %in%
x[x$Assay %in% y, ]
#    Assay Chrom   ChromPos
# 10     b     4  0.6198257
# 12     e     4 -0.1557955
# 24     d     4  1.1000254
# 27     a     4 -0.2533617

## And can also directly extract a specific column
x[x$Assay %in% y, "ChromPos"]
# [1]  0.6198257 -0.1557955  1.1000254 -0.2533617
##假设“x”是您的数据帧
种子(1)

x以防万一运行时仍然是一个问题,使用
数据。table
包比
merge
快约100倍,比
%in%
快50倍:

library(data.table)
dt <- as.data.table( yourDataFrame )
setkey( dt, Assay )
dt[ J(yourVector) ]
库(data.table)

谢谢!。合并后如何保存新数据帧?只需输入
new\u df\u Name,显然,如果您希望在新df中有更多列,您可以执行合并(vector\u frame,your\u data\u frame,by=“Assay Name”)[,1:3]
library(data.table)
dt <- as.data.table( yourDataFrame )
setkey( dt, Assay )
dt[ J(yourVector) ]