2016-11-28 21 views
1

正則表達式模式的出現我中的R工作的數目細胞計數和我有一個包含後生信息的數據幀。我有含基因組位置300,000行和15列的每一個的標識可以是或不是在每個基因座上發生的轉錄因子基序。- [R需要用於在整個數據幀

我想用正則表達式來計算每個轉錄因子在每個基因組位點出現多少次。個人基序可以在任何一個位點發生> 15倍,所以我想輸出是含有基序計數所述數據幀的每個單獨的小區的矩陣/數據幀。

在細胞中的基序的一個典型的單次出現可能是:

2212(AATTGCCCCACA,-,0.00) 

然而,如果有一個基序的多次出現,這些將在細胞存在,作爲一個連續字符串由逗號分隔的每個條目,例如對於兩個條目:

144(TGTGAGTCAC,+,0.00),145(GTGAGTCACT,-,0.00) 

下面是一些玩具數據:

df <-data.frame(NAMES = c('LOC_A', 'LOC_B', 'LOC_C', 'LOC_D'), 
     TFM1 = c("144(TGTGAGTCAC,+,0.00),145(GTGAGTCACT,-,0.00)", "2(TGTGAGTCAC,+,0.00)", "0", "0"), 
     TFM2 = c("632(TAAAGAGTCAC,-,0.00),60(GTCCCTCACT,-,0.00),", "7(TGTGAGTCAC,+,0.00)", "7(TGTGAGTCAC,+,0.00)", "0"), 
     stringsAsFactors = F) 

我會尋找以下格式輸出:

NAMES TFM1  TFM2  
LOC_A  2  2   
LOC_B  1  1 
LOC_C  0  1 
LOC_D  0  0 

如果可能的話,我想避免的循環,但如果需要的循環就這樣吧。要獲得行數對於這個數據幀我用下面的代碼,敬請@akrun推薦:

df$MotifCount <- Reduce(`+`, lapply(df[-1], 
          function(x) lengths(str_extract_all(x, "\\d+\\(")))) 

注意,這裏使用的圖案的唯一標識符爲「\\ d + \\(」拿起數量和在每個基序的識別字符串的開始開口托架,這將必須被包括在任何溶液代碼。類似的東西,其在整個數據幀工作以提供單個細胞計數將是理想的。

非常感謝

回答

1

我們不需要Reduce部分

data.frame(c(df[1],lapply(df[-1], function(x) lengths(str_extract_all(x, "\\d+\\("))))) 
# NAMES TFM1 TFM2 
#1 LOC_A 2 2 
#2 LOC_B 1 1 
#3 LOC_C 0 1 
#4 LOC_D 0 0 
+0

感謝@ akrun,這就是我一直在尋找! – Darren

1

這也將工作:

cbind.data.frame(df[1],sapply(lapply(df[-1], function(x) str_extract_all(x, "\\d+\\(")), function(x) lapply(x, length))) 

# NAMES TFM1 TFM2 
#1 LOC_A 2 2 
#2 LOC_B 1 1 
#3 LOC_C 0 1 
#4 LOC_D 0 0 
+0

謝謝@sandipan – Darren

+0

嗨@sandipan,沒有probs。 – Darren