1

我一定是误解了 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

这一定是我不明白的显而易见的事情。请善待你的回答,我正在努力学习。

谢谢!

4

3 回答 3

8

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

基本上,在将 data.frame 传递给data.matrix.

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

euk <- data.matrix(read.csv("path/to/csv.csv", na.strings = "-", colClasses = 'numeric'))
于 2013-04-26T18:14:41.930 回答
0

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

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

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

于 2013-04-26T18:10:40.130 回答
0

我剪切/粘贴了您的数据,将其放入文件中,然后使用“R”获取

> 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 文件,则日期的内部表示是一个数字。

于 2013-04-26T18:54:47.777 回答