2016-11-15 4 views
2

http://rstudio.github.io/DT/010-style.htmlに記載されている例の次のステップとして、下の図に示すように、フィルタ値に基づいてセル内の文字列の一部を強調表示したい。私は表形式で生物学的配列データの特定のモチーフを強調しようとしています。以下は、ExcelのVBAコードと代表的な画像です。 Rでこれを達成することは可能ですか?フィルタ値に基づいてセルコンテンツ内の文字列の一部を強調表示

Sub SequencePartColourMacro() 
Dim Col, Row, FirstRow, LastRow As Integer, Col As Long 

Col = 6 
FirstRow = 2 
LastRow = ThisWorkbook.Sheets("Sequences").Cells(Rows.Count, "F").End(xlUp).Row 

Test1 = "CC" 
Test2 = "TT" 
Test3 = "GG" 

For Row = FirstRow To LastRow 
    Sequence = ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Value 
    For x = 1 To Len(Sequence) 
    SubSequence1 = Mid(Sequence, x, 2) 
    If SubSequence1 = Test1 Then 
     ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Color = RGB(0, 0, 255) 
     ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Bold = True 
    End If 
    If SubSequence1 = Test2 Then 
     ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Color = RGB(0, 102, 0) 
     ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Bold = True 
    End If 
    If SubSequence1 = Test3 Then 
     ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Color = RGB(255, 153, 0) 
     ThisWorkbook.Sheets("Sequences").Cells(Row, Col).Characters(x, 2).Font.Bold = True 
    End If 
Next x 
Next Row 
End Sub 

Representative image showing highlighted characters

+0

だから、フィルタ値を言うとき、あなたはテーブルの実際のフィルタ検索ボックスについて話していません。あなたはテーブルにハイライト表示されている所定の文字列test1、test2、test3を持っていますか? – Carl

答えて

2

は、これは少し冗長ですが、そう一般的にはVBAである:すべてのオカレンスを識別し、強調しで@カールのコード結果の

library(DT) 
set.seed(1986) 
x <- vector() 
# create fake dna or rna sequence (it's been a while since I took bio) 
for (i in 1:10) { 
    x[i] <- paste0(sample(c("A","G","T","C"),10,replace=TRUE), collapse="") 
} 

dim(x) <- c(5,2) 

datatable(x, options = list(rowCallback=JS(
    "function(row,data) { 
    data[0]=data[0].replace('CC','<span style=\"color:red\">CC</span>'); 
    data[0]=data[0].replace('TT','<span style=\"color:blue\">TT</span>'); 
    data[0]=data[0].replace('GG','<span style=\"color:green\">GG</span>'); 
    data[1]=data[1].replace('CC','<span style=\"color:red\">CC</span>'); 
    data[1]=data[1].replace('TT','<span style=\"color:blue\">TT</span>'); 
    data[1]=data[1].replace('GG','<span style=\"color:green\">GG</span>'); 
    $('td:eq(0)', row).html(data[0]); 
    $('td:eq(1)', row).html(data[1]); 
    }" 
), dom = 't')) 

enter image description here

+0

Carlさんに感謝します。しかし、私の状況は、 "TAG"のような検索用語/モチーフと他のものはハードコーディングされているか、複数の選択フィルタで提供されており、それぞれの検索用語/モチーフは異なるfg色で(または異なるfgおよびbg色)。これはExcel-VBAのトリックではありましたが、Rで実装できませんでした。 – RanonKahn

+0

あなたの質問を編集してVBAの例を含めることができますか、わかりません – Carl

+0

私は質問を更新しました。 – RanonKahn

1

リトル微調整選択された文字列の私のような人にとっては役に立つかもしれません。

library(DT) 
set.seed(1986) 
x <- vector() 
create fake dna or rna sequence (it's been a while since I took bio) 
for (i in 1:10) { 
x[i] <- paste0(sample(c("A","G","T","C"),25,replace=TRUE), collapse="") 
} 
dim(x) <- c(5,2) 

datatable(x, options = list(rowCallback=JS(
    "function(row,data) { 
    data[0] = data[0] .replace(/GA/g,'<span style=\"color:red\">GA</span>'); 
    data[0] = data[0] .replace(/TT/g,'<span style=\"color:blue\">TT</span>'); 
    data[0] = data[0] .replace(/TC/g,'<span style=\"color:green\">TC</span>'); 
    data[1] = data[1] .replace(/GA/g,'<span style=\"color:red\">GA</span>'); 
    data[1] = data[1] .replace(/TT/g,'<span style=\"color:blue\">TT</span>'); 
    data[1] = data[1] .replace(/TC/g,'<span style=\"color:green\">TC</span>'); 
    $('td:eq(0)', row).html(data[0] ); 
    $('td:eq(1)', row).html(data[1] ); 
    }" 
), dom = 't')) 
関連する問題