2016-06-10 302 views
0

我有一個具有挑戰性的文件閱讀任務。 我有一個典型的老會計部門的.txt文件(包含標題,標題,頁面和有用的表格定量和定性信息)。它看起來像這樣: How the data looksR從文本文件讀取數據

從這個文件我試圖做兩個任務(與read.table和掃描):

1)提取其|之間的表格中顯示的信息是會計信息(任何審判你可以看到客戶的信息是:在一個不容易的數據幀或特徵向量)

tabulated info to be extracted

2)包括作爲變量每個字幕與「客戶」的文本文件開始結束itle,然後是會計信息(應付帳款),然後是另一個客戶和會計信息等等。所以不是一列,而是一排(?)

我一直試着用read.table(幾個sepquote參數)和掃描,然後試圖處理字符向量。

謝謝!

+0

因爲這是一個固定寬度的文件,所以使用'read.fwf()'會更好。 – Andrie

+0

我不認爲''read.fwf''完全有助於所有標準方法。 – Altons

回答

1

我以前去過那裏,所以我知道你正在經歷什麼。

我有2條新聞給你,一個壞,一個好。壞一個我已閱讀,在這些類型的文件在SAS噸次,但從未在的R - 然而 好消息是我可以給你一些提示,這樣你就可以做出來的R.

所以策略如下:

1)您將讀取文件到一個數據幀,其中包含只有的單個列。這一欄是字符,並將保存 整行輸入文件。即如果文件中的最大行長度爲80,則長度爲80。

2)現在你有一個數據框,其中每條記錄等於輸入文件中的一行。在這一點上,你可能想要檢查你的文件中的數據幀與每行有相同的數字或記錄。

3)現在你可以使用grep來擺脫關閉或只保留那些符合條件的(即與「客戶」)開頭字幕線。 你可能會發現在這裏真正有用的正則表達式。

4)你的數據框現在只有符合「客戶」模式和表模式 (即符合'Country'/\d{3} \d{8}/' Total'開始)記錄。

5)你現在需要做的是創建一組變量,增加每找到「客戶」時間+1。所以group = 1會重複相同的值,直到找到'Customer 010343',其中group現在是group = 2。或者甚至更好的是,您的組可以是客戶ID,直到找到新的ID。你需要以某種方式保留該id,直到找到一個新的id。

從你幾乎做,你將能夠識別客戶和表格很容易的最後一步。您可能希望創建一個以表格格式輸出表格字符串的函數。

無論您是在單個表格中處理它們,還是將數據幀拆分爲n個數據幀來單獨處理它們都由您決定。

在SAS中,這是指針(@)和保留(保留語句)的概念,每條匹配條件的行可以與其他條件不同,因此您輸出的數據集已包含表格格式的列和客戶信息。

嗯,希望這可以幫助你。

+0

謝謝奧爾頓!我會考慮這個策略,但用R的眼睛....讓我們看看會發生什麼! – Lucas