我有一个来自文本文件的数据集,5000个库存,751个数据点,3年的数据,它从第1天到751然后是下一个库存
N stock date price
1 S1 70516 9.11
2 S1 70517 9.00
.......................
5718864 S5000 100330 64.8
5718865 S5000 100331 64.6
我可以使用以下方式加载数据:
data(txt) <- read.table("C:\\test.txt", header=T)
在此之后,但我卡住了,我无法在交易所或谷歌上找到任何东西我怎么能把它加载到一个矩阵,其中有751行和5000个coloumns,每个点只对应价格
E1 price E5000 price
day1 1 ........ 1
.. ..
.. ..
day751 ........... 1
答案 0 :(得分:5)
read.zoo
可以做到这一点。假设这个数据:
Lines <- "N stock date price
1 S1 70516 9.11
2 S1 70517 9.00
5718864 S5000 100330 64.8
5718865 S5000 100331 64.6"
然后我们创建一个转换日期的函数(如果日期的编码与此处假设不同,则更改此项)并使用read.zoo
指定
header = TRUE
split = 1
index = 2
colClasses
排除第一列(因此第二列成为第一列,第三列成为第二列,等等),因为该列似乎不需要,colClasses = c("NULL", NA, NA, NA)
< / LI>
text = Lines
替换为file = "myfile.dat"
,并提供:
library(zoo)
toDate <- function(x) as.Date(sprintf("%06d", x), "%y%m%d")
z <- read.zoo(text = Lines, header = TRUE, split = 1, index = 2,
FUN = toDate, colClasses = c("NULL", NA, NA, NA))
结果是以下zoo对象:
> z
S1 S5000
2007-05-16 9.11 NA
2007-05-17 9.00 NA
2010-03-30 NA 64.8
2010-03-31 NA 64.6
答案 1 :(得分:2)
使用as.matrix()
。见help(as.matrix)
。
答案 2 :(得分:2)
从重塑包中查看cast
。您可以将数据从“长”格式更改为“宽”格式,然后再返回。还有本机R函数,例如reshape
,但我觉得reshape或reshape2包提供了一个更简单的界面。
> dat<-data.frame(stock=letters[1:10], date=rep(1:10,each=10), price=round(runif(100),2))
> head(dat)
stock date price
1 a 1 0.84
2 b 1 0.46
3 c 1 0.43
4 d 1 0.99
5 e 1 0.86
6 f 1 0.03
> cast(date~stock, data=dat, value="price")
date a b c d e f g h i j
1 1 0.84 0.46 0.43 0.99 0.86 0.03 0.56 0.09 0.66 0.43
2 2 0.46 0.78 0.80 0.90 0.20 0.87 0.73 0.65 0.35 0.24
3 3 0.12 0.16 0.57 0.10 0.40 0.05 0.68 0.53 0.67 0.74
4 4 0.45 0.26 0.63 0.98 0.78 0.29 0.59 0.63 0.62 0.13
5 5 0.21 0.79 0.83 0.36 0.11 0.12 0.64 0.86 0.35 0.18
6 6 0.14 0.31 0.63 0.48 0.86 0.57 0.32 0.70 0.89 0.99
7 7 0.85 0.41 0.29 0.57 0.05 0.80 0.32 0.13 0.10 0.53
8 8 0.03 0.71 0.48 0.57 0.09 0.88 0.70 0.22 0.68 0.78
9 9 0.83 0.52 0.24 0.82 0.86 0.87 0.53 0.38 0.58 0.78
10 10 0.36 0.05 0.95 0.41 0.73 0.20 0.62 0.08 0.98 0.50
>