2014-01-20 82 views
1

我在R中有一個字符向量,其值爲330000,例如,R:如何查找並提取數據幀中的值

amp184660
amp947
amp53303
amp364886
amp121615

,並與數據幀是這樣的:

enter image description here

我想找到的第一個我的特徵向量的每個值數據框的列即「分析名稱」,然後輸出其相應的染色體位置即「Chrom」成爲一個新的載體。我希望儘可能快地做到這一點,因爲大約有330k條目,通過循環執行grep需要大約12個小時才能完成。

任何想法?謝謝 傑森。

回答

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 
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爲[1,3],因爲我看到你想要的第三列和R將如重命名$通話列到Chrom.Pos..bp。或類似的東西 - 如果你鍵入$並在RStudio編輯器中按TAB它會給你的選項

+0

Thanks !.合併後如何保存新的數據框? – Jason

+0

只是把'new_df_name <-'放在合併調用 – Troy

+0

的前面,顯然如果你想在新的df中有更多的列,你可以做合併(vector_frame,your_data_frame,by =「Assay Name」)[,1:3 ] – Troy

0

萬一運行時仍然是一個問題,使用data.table包約。比merge快100倍,比%in%快50倍:

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