2012-12-11 46 views
0

我也發現了類似問題,這在這裏: Count the number of words in a string in R? 這裏 Faster way to split a string and count characters using R? ,但我不能讓無論是在我的示例工作。我有一個相當大的數據框。其中一列有功能基因組位置和條目按如下格式:在數據框中統計字符串中的特定字符。 sapply

[hg19:2:224840068-224840089:-] 
[hg19:17:37092945-37092969:-] 
[hg19:20:3904018-3904040:+] 
[hg19:16:67000244-67000248,67000628-67000647:+] 

我分裂了這些元素融入thier各個元素得到以下(I,E,對於第一個條目):

hg19 2 224840068 224840089 - 

但是在第四項的情況下,我想把它分成兩個不同的位置。 即

hg19:16:67000244-67000248,67000628-67000647:+] 

成爲

hg19 16 67000244 67000248 + 
hg19 16 67000628 67000647 + 

(在從原來的填充在相鄰列所有相關數據)

對我來說,識別哪些行需要這個動作是一個簡單的方法只需用逗號「,」來計算行,因爲它們不會出現在任何其他列中的任何其他文本中,除非該特徵有多個基因組位置。 但是我在第一個障礙上失敗了,因爲sapply命令錯誤地爲每個條目返回'1'。

testdat$multiple <- sapply(gregexpr(",", testdat$genome_coordinates), length) 

(或)

testdat$multiple <- sapply(gregexpr("\\,", testdat$genome_coordinates), length) 

    table(testdat$multiple) 
    1 
    4 

用我上面張貼的例子,我希望可以將輸出爲

testdat$multiple 
0 
0 
0 
1 

實際上做

grep -c 

上命令行中的相同數據顯示I h包含','的10個條目。

用我上面張貼的例子,我希望可以將輸出爲

所以最初我想獲得這個工作,而且我有點難倒想法,如何再提取兩(或更多)位置並將它們放在自己的行上,填充相鄰的數據。 其實我想要的是堅持我認識的東西(在命令行上)用','擦除行,複製文件並拆分並awk選定的列(相應文件中的第一個和第二個位置),然後cat和整理它們。如果在R中有這樣一個更加方便的方法,那麼我會喜歡一個指針。

+0

你可以請你減少你的問題,並集中你的問題,你有什麼作爲投入,你有什麼期望? – agstudy

+0

對不起,我編輯了這個希望它更清晰 – jksl

回答

0

gregexpr事實上確實返回長度爲1的對象。如果你想找到其中有一個匹配VS其中不需要的那些行,那麼你需要看看返回,不是長度。比賽失敗返回-1
嘗試使用foo<-sapply(testdat$genome, function(x) gregexpr(',',x)); as.logical(foo)以逗號得到行。

+0

啊我看,它返回一個值(我猜0),即使它沒有找到匹配呢?這非常有用,謝謝。 – jksl

+0

正如我寫的,它返回值爲'-1'。不要猜測什麼時候可以測試:-) –

相關問題