R正确使用read.csv

时间:2013-04-26 18:03:18

标签: r read.csv

我一定是误解了read.csv在R中是如何工作的。我已经阅读了帮助文件,但仍然不明白csv文件是如何包含的:

40900,-,-,-,241.75,0
40905,244,245.79,241.25,244,22114
40906,244,246.79,243.6,245.5,18024
40907,246,248.5,246,247,60859

使用以下内容读入R:euk<-data.matrix(read.csv("path\to\csv.csv"))

生成此结果(使用tail):

         Date Open High Low  Close Volume
[2713,] 15329  490  404 369 240.75  62763
[2714,] 15330  495  409 378 242.50 127534
[2715,] 15331    1    1   1 241.75      0
[2716,] 15336  504  425 385 244.00  22114
[2717,] 15337  504  432 396 245.50  18024
[2718,] 15338  512  442 405 247.00  60859

一定是我不明白的明显事物。请善意回答,我正在努力学习。

谢谢!

3 个答案:

答案 0 :(得分:8)

问题不在于read.csv,而在于data.matrixread.csv导入任何包含字符的列作为因子。数据集第一行中的“ - ”是字符,因此该列将转换为因子。现在,您将read.csv的结果传递给data.matrix,并且在帮助状态下,它会将因子的级别替换为内部代码。

基本上,在将data.frame传递给data.matrix之前,您需要确保数据列是数字的。

这适用于您的情况(假设唯一的字符是' - '):

euk <- data.matrix(read.csv("path/to/csv.csv", na.strings = "-", colClasses = 'numeric'))

答案 1 :(得分:0)

我不是R专家,但你可以考虑改用scan(),例如:

> data = scan("foo.csv", what = list(x = numeric(), y = numeric()), sep = ",")

其中foo.csv有两列x和y,并且以逗号分隔。我希望有所帮助。

答案 2 :(得分:0)

我对您的数据进行剪切/粘贴,将其放入文件中,然后使用&#39; R&#39;

> c<-data.matrix(read.csv("c:/DOCUME~1/Philip/LOCALS~1/Temp/x.csv",header=F))
> c
        V1 V2 V3 V4     V5    V6
[1,] 40900  1  1  1 241.75     0
[2,] 40905  2  2  2 244.00 22114
[3,] 40906  2  3  3 245.50 18024
[4,] 40907  3  4  4 247.00 60859
> 

数据文件中必须有更多内容,首先是标题行的数据。你显示的输出似乎从第2713行开始。我会检查:

The format of the header line, or get rid of it and add it manually later.
That each row has exactly 6 values.
The the filename uses forward slashes and has no embedded spaces 
(use the 8.3 representation as shown in my filename).

此外,如果您从MS Excel生成csv文件,则日期的内部表示形式为数字。