0

ここでこれと同様の問題を見つけました: R の文字列内の単語数を数えますか? ここで 、Rを使用して文字列を分割し、文字をカウントするより高速な方法は? しかし、私の例ではどちらも機能しません。私はかなり大きなデータフレームを持っています。列の 1 つは機能のゲノム位置を示し、エントリは次のようにフォーマットされます。

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

これらの要素を個々の要素に分割して、次のものを取得しています(つまり、最初のエントリの場合):

hg19    2   224840068   224840089   -

しかし、4番目のエントリの場合、これを2つの別々の場所に貼り付けたいと思います. すなわち

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

コマンド ラインの同じデータに、「,」を含むエントリが 10 個あることが示されます。

上に投稿した例を使用すると、出力は次のようになると予想されます

したがって、最初はこれを機能させたいと思っていますが、2つ(またはそれ以上)の場所を抽出して独自の行に配置し、隣接するデータを埋める方法についてのアイデアにも少し困惑しています。実際に私が意図したことは、(コマンド ラインで) 知っていること (コマンド ラインで) に固執することでした。彼ら。Rでこれを行うためのより優れた方法があれば、ポインターが大好きです。

4

1 に答える 1

1

gregexpr 実際には、長さ 1 のオブジェクトを返します。一致する行と一致しない行を見つけたい場合は、長さではなく、返されたを調べる必要があります。一致の失敗は を返します-1。コンマを使用して行を取得して
みてください。foo<-sapply(testdat$genome, function(x) gregexpr(',',x)); as.logical(foo)

于 2012-12-11T14:35:35.683 に答える