我导入了一个包含大量列和数据部分的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")
我很好奇是否有更好的方法:
将所有数字读取为数字,无需转换。
以一种有意义的方式处理文件中的不同数据集。
任何提示都将不胜感激。谢谢。
状态更新:
我还没有在R中找到一个好的解决方案,但我已经开始在Lua中编写一个脚本,将每个单独的时间序列分成一个单独的文件。我暂时离开这个,因为我很好奇R将如何处理所有这些文件。我每天会收到8个文件。
答案 0 :(得分:3)
我个人会做的是用一些脚本语言创建一个脚本,在将文件读入R之前分离不同的数据集,并且可能也做一些必要的数据转换。
如果您想在R中进行拆分,请查找readLines
和scan
- read.csv2
太高级,并且用于读取单个数据帧。您可以将不同的数据集写入不同的文件中,或者如果您雄心勃勃,可以编写可与read.csv2
一起使用的类文件R对象,并从基础大文件的正确部分读取。
在您处理将数据集分成不同文件后,请对这些文件使用read.csv2
(或最适合read.table
个变体 - 如果这些不是制表符而是固定宽度字段,请参阅{{ 1}})。如果您的文件中read.fwf
表示“不可用”,请务必将其指定为<NA>
的一部分。如果您不这样做,R认为您在该字段中有非数字数据,但使用右na.strings
,您会自动将字段转换为数字。您的某个字段似乎可以包含na.strings
等时间戳,因此您需要使用00:00
并指定可以转换时间戳格式的类。如果内置的colClasses
类不起作用,只需定义您自己的Date
类和执行转换的timestamp
函数。