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

时间:2014-01-20 12:41:16

标签: r bioinformatics

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

amp184660
amp947
amp53303
amp364886
amp121615

和这样的数据框:

enter image description here

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

有什么想法吗? 谢谢 杰森。

3 个答案:

答案 0 :(得分:1)

我建议%in%,这可能比merge更快。这是一个玩具示例:

## 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

答案 1 :(得分:0)

# assume your df called your_data_frame and vector called your_character_vector

vector_frame<-data.frame("Assay Name"=your_character_vector)
merge(vector_frame,your_data_frame,by="Assay Name")[,3]

注意我将列符号从$ Chrom更改为[,3],因为我看到你想要第三列而R将重命名$ call中的列,例如到Chrom.Pos..bp。或类似的东西 - 如果你键入$并在RStudio编辑器中按TAB它会给你选项

答案 2 :(得分:0)

如果运行时仍然存在问题,使用data.table包大约是。比merge快100倍,比%in%快50倍:

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