4

我已经导入了一个包含大量数据列和部分的 csv 文件。

v <- read.csv2("200109.csv", header=TRUE, sep=",", skip="6", na.strings=c(""))

文件的布局是这样的:

Dataset1
time, data, .....
0       0
0       <NA>
0       0

Dataset2
time, data, .....
00:00   0
0       <NA>
0       0

(不同数据集的标题完全相同。

现在,我可以绘制第一个数据集:

plot(as.numeric(as.character(v$Calls.served.by.agent[1:30])), type="l")

我很好奇是否有更好的方法:

  1. 无需转换即可将所有数字读取为数字。

  2. 以某种有意义的方式处理文件中的不同数据集。

任何提示将不胜感激。谢谢你。


状态更新:

我还没有在 R 中真正找到一个好的解决方案,但是我已经开始在 Lua 中编写一个脚本来将每个单独的时间序列分成一个单独的文件。我暂时将其保持打开状态,因为我很好奇 R 将如何处理所有这些文件。我每天会收到 8 个文件。

4

1 回答 1

3

我个人会做的是在将文件读入 R 之前用某种脚本语言制作一个脚本来分离不同的数据集,并且可能还会进行一些必要的数据转换。

如果您想在 R 中进行拆分,请查找readLines-太高级,用于读取单个数据帧scanread.csv2您可以将不同的数据集写入不同的文件,或者如果您有野心,可以创建类似文件的 R 对象,这些对象可用于read.csv2底层大文件的正确部分并从中读取。

一旦您处理了将数据集分成不同的文件,请read.csv2在这些文件上使用(或任何read.table最好的变体 - 如果这些不是选项卡而是固定宽度的字段,请参阅read.fwf)。如果<NA>在您的文件中指示“不可用”,请务必将其指定为na.strings. 如果您不这样做,R 会认为您在该字段中有非数字数据,但是使用 right na.strings,您会自动将该字段转换为数字。您的一个字段似乎可以包含时间戳00:00,因此您需要使用colClasses并指定一个类,您的时间戳格式可以转换为该类。如果内置Date类不起作用,只需定义您自己的timestamp类和进行as.timestamp转换的函数即可。

于 2009-03-27T06:57:58.293 回答