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

我的大问题是将此列表转换为可管理的元素列表,以便我可以搜索存在 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}}

我已经知道我将不得不使用该Take命令,该Partition命令将子列表拆分为 3 个元素的子列表,依此类推。但是因为我什至无法在列表列表中获取数据,所以我无法做到这一点..

此外,导入时我必须选择"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 回答