0

Mathematica にインポートする巨大なテキスト ファイルがあります。次のようになります。

    In[9]:=import=SplitBy[Import["textfile.txt","List"],"\\t"];

    Out[9]:={{  A   021 2.3 A   002 2.6},{  A   012 2.3 A   001 2.6},{  A   120 2.6 A   111 2.9},{  A   122 2.8 A   121 2.8},{  A   000 1.3 A   121 2.9},{  A   110 2.4 A   111 2.9},{  G   010 2.3 G   001 2.6},{  G   000 2.2 G   001 2.3 G   010 2.4},{  G   010 2.3 G   001 2.6},{  G   110 2.3 G   101 2.6}}

編集: すべての要素が文字で区切られていることに注意してください\\t

これは、次のような文字列のリストです。

    In[12]:= Head@import
    Head@import[[1]]
    Head@import[[All, 1]]
    Head@import[[1, 1]]

    Out[12]= List
    Out[13]= List
    Out[14]= List
    Out[15]= String

私の大きな問題は、このリストを要素の扱いやすいリストに変換して、A が存在する場所ではなく、G が存在する場所を検索できるようにすることです。存在する文字列の部分を a に置き換えてみました。しかし、個々の G 要素を検索することを許可していないため、データを希望どおりに処理することはできません。理想的には、私が最終的に得たかったのは

    {{G,010,2.3},{G,001,2.6},{G,000,2.2},{G,001,2.3},{G,010,2.4},{G,010,2.3},{G,001,2.6},{G,110,2.3},{G,101,2.6}}

コマンド、サブリストを 3 つの要素のサブリストに分割するTakeコマンドなどを使用する必要があることは既にわかっています。Partitionしかし、リストのリストでデータを取得することさえできないため、これを作成することはできません..

さらに、インポート時に"List"タイプを選択する必要があります。そのままインポート"Table"すると中途半端なのですが、要素「001」が「1」になってしまいます。

私を助けてくれませんか?すべての助けに感謝します!ありがとう

4

2 に答える 2

4

将来、インポートする実際のファイルのサンプルを含めることができれば非常に役に立ちます。それでも、これを推奨するのに十分な精度でファイルの形式を推測できると思います。

data = ReadList["textfile.txt", {Word, Number, Number}]

ファイルが返されることを望んでいる形式の場合:

{{"A", 21, 2.3}, {"A", 2, 2.6}, {"A", 12, 2.3}, {"A", 1, 2.6}, {"A", 
  120, 2.6}, {"A", 111, 2.9}, {"A", 122, 2.8}, {"A", 121, 2.8}, {"A", 
  0, 1.3}, {"A", 121, 2.9}, {"A", 110, 2.4}, {"A", 111, 2.9}, {"G", 
  10, 2.3}, {"G", 1, 2.6}, {"G", 0, 2.2}, {"G", 1, 2.3}, {"G", 10, 
  2.4}, {"G", 10, 2.3}, {"G", 1, 2.6}, {"G", 110, 2.3}, {"G", 101, 
  2.6}}

そこから、で始まるレコードを取得するに"G"は、好みでこれらのいずれかを使用できます。

Cases[data, {"G", ___}]

Select[data, "G" === #[[1]] &]

Pick[data, First /@ data, "G"]
于 2012-07-26T08:10:29.500 に答える
2

このマシンには Mathematica がインストールされていないため、構文が少し間違っている可能性があります。

しません

niceList = Partition[Flatten[import],3]

内部レベルの各リストが 3 つの文字列で構成されるリストのリストを作成します。次に、次のようなもの

Select[niceList,#[[1]]=="G"&]

"G"最初の要素としてa を持つサブリストを選択する必要があります。

編集

私が今あなたを理解しているなら、あなたの変数importには、次のような下位レベルのリストのそれぞれのリストのリストがあることを意味します

{  A   021 2.3 A   002 2.6}

単一の文字列を含む ? 言い換えると

FullForm[  A   021 2.3 A   002 2.6]

戻り値

"  A   021 2.3 A   002 2.6"

データをインポートし、すべてのタブ文字をスペースに置き換えてから、StringSplit[](適切なレベルで) を使用して各文字列を文字列のリストに変換します。次に、、FlattenなどPartition。最初に、ファイルの内容全体を単一の文字列にインポートすることから始めるのが最も簡単な場合があります。

于 2012-07-25T10:46:33.657 に答える