我在R中有一個字符向量,其值爲330000,例如,R:如何查找並提取數據幀中的值
amp184660
amp947
amp53303
amp364886
amp121615
,並與數據幀是這樣的:
我想找到的第一個我的特徵向量的每個值數據框的列即「分析名稱」,然後輸出其相應的染色體位置即「Chrom」成爲一個新的載體。我希望儘可能快地做到這一點,因爲大約有330k條目,通過循環執行grep需要大約12個小時才能完成。
任何想法?謝謝 傑森。
我在R中有一個字符向量,其值爲330000,例如,R:如何查找並提取數據幀中的值
amp184660
amp947
amp53303
amp364886
amp121615
,並與數據幀是這樣的:
我想找到的第一個我的特徵向量的每個值數據框的列即「分析名稱」,然後輸出其相應的染色體位置即「Chrom」成爲一個新的載體。我希望儘可能快地做到這一點,因爲大約有330k條目,通過循環執行grep需要大約12個小時才能完成。
任何想法?謝謝 傑森。
我建議%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
# 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它會給你的選項
萬一運行時仍然是一個問題,使用data.table
包約。比merge
快100倍,比%in%
快50倍:
library(data.table)
dt <- as.data.table(yourDataFrame)
setkey(dt, Assay)
dt[ J(yourVector) ]
Thanks !.合併後如何保存新的數據框? – Jason
只是把'new_df_name <-'放在合併調用 – Troy
的前面,顯然如果你想在新的df中有更多的列,你可以做合併(vector_frame,your_data_frame,by =「Assay Name」)[,1:3 ] – Troy