2010-11-03 24 views
1

閱讀這種類型的文件。這是數據文件:在數學

ID YR MO DA YrM MoM DaM 
100 2010 2 20 2010 8 30 
110 2010 4 30 2010 9 12  
112 2010 8 20 2010 10 28 

我應該能夠訪問的每個元素在這個文件中,我試圖在數學創造紀錄使用此功能,但我得到一個錯誤

ReadList["testA.txt", Number, RecordLists -> true] 

Error: ReadList::opttf: Value of option RecordLists -> true should be True or False. 

另外如何在做記錄後訪問每個元素?

Mathematica中還有一種方法可以創建一個兩列日期不同的列,並將其放入新列中。

這個家庭作業的確允許使用excel來計算,但我必須在Mathematica中這樣做。

+0

順便說一句,您已經提出了八個問題,並且從未接受過答案...... StackOverflow對您有用嗎?如果是的話,開始標記更好的答案爲「接受」,以表明 – 2010-11-03 02:34:35

+0

OMG!你從來沒有投票答覆。永遠不會回答一個問題。這幾乎是一種恥辱... – 2010-11-03 02:46:10

+1

belisarius是正確的。本網站運營累積的聲譽是通過其他人對您發佈的問題和答案進行投票獲得的,並可能將您的答案視爲最佳/正確答案。爲了使這個系統起作用,你應該對你認爲有用的答案進行投票,並接受那些能夠最好地回答你的問題的答案。否則,從長遠來看,你最終會發現你的問題被忽略。 – rcollyer 2010-11-03 03:29:16

回答

6

您提出了3個問題,我會盡力回答所有問題。由於belisarius pointed out,Mathematica區分大小寫。所以,你的代碼應該是:

In[1]:=ReadList["testA.txt", Number, RecordLists -> True] 

然而,隨着第一行是由String不是Number s這個仍然會產生錯誤。因此,最簡單的做法是使用Michael Pilat's solution並使用Import。這將返回一個列表,其中文件中的每個記錄都將成爲子列表之一。

要訪問特定的子表,你使用Part,或者其簡單的形式[[ ]],如下:

In[2]:={{100, 2010, 2, 20, 2010, 8, 30}, 
     {110, 2010, 4, 30, 2010, 9,12}, 
     {112, 2010, 8, 20, 2010, 10, 28}}[[1]] 
Out[2]:={100, 2010, 2, 20, 2010, 8, 30} 

或者,如果你想要一個特定的列

In[3]:={{100, 2010, 2, 20, 2010, 8, 30}, 
     {110, 2010, 4, 30, 2010, 9,12}, 
     {112, 2010, 8, 20, 2010, 10, 28}}[[All,4]] 
Out[3]:={20, 30, 20} 

現在,再添列到您的列表中,有幾種方法。最簡單的方法是Transpose你的數據,

In[4]:=Transpose[data] 
Out[4]:={{100, 110, 112}, {2010, 2010, 2010}, {2, 4, 8}, 
     {20, 30, 20}, {2010, 2010, 2010}, {8, 9, 10}, {30, 12, 28}} 

選擇現在行和Apply功能對他們來說,

In[5]:=Plus @@ Out[4][[{3,6}]] 
Out[5]:={10,13,18} 

新行附加到舊數據,並轉回到

In[6]:=Out[4]~Join~Out[5] // Transpose 
Out[6]:={100, 2010, 2, 20, 2010, 8, 30, 10}, 
     {110, 2010, 4, 30, 2010, 9, 12, 13}, 
     {112, 2010, 8, 20, 2010, 10, 28, 18}} 

在概念上更困難,但更直接的方法是使用Map將函數應用於原始數據中的每一行返回帶有新數據的行

In[7]:=Map[#~Join~{[email protected]@#[[{3,6}]]}&, data] 
Out[7]:={100, 2010, 2, 20, 2010, 8, 30, 10}, 
     {110, 2010, 4, 30, 2010, 9, 12, 13}, 
     {112, 2010, 8, 20, 2010, 10, 28, 18}} 
+0

+1一個漂亮的單頁面崩潰過程列表操作 – 2010-11-03 04:14:37

+0

@belisarius:謝謝。有一些日子,這是我所做的一切。 – rcollyer 2010-11-03 04:18:23

+2

關於添加列我最近發現'ArrayFlatten'的樂趣:http://stackoverflow.com/questions/1244782/how-to-prepend-a-column-to-a-matrix/2274679#2274679 – Janus 2010-11-03 04:33:09

4

Ť芸香:))

Mathematica的是Ç ASE- 小號 ensitive

10

你也可以使用Import"Table"格式,它甚至可以忽略該標題行:

In[1:= Import["test.txt", "Table", "HeaderLines" -> 1] 

Out[1]= {{100, 2010, 2, 20, 2010, 8, 30}, {110, 2010, 4, 30, 2010, 9, 
12}, {112, 2010, 8, 20, 2010, 10, 28}}