2016-06-10 185 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