R загрузка набора данных из текста в матрицу - PullRequest
2 голосов
/ 31 января 2012

У меня есть набор данных из текстового файла, 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)

после этого, однако, я застрял, и я не могу найти что-либо на бирже или Google, как я могу загрузить это в матрицу, где есть 751 строк и 5000 столбцов, и каждая точка соответствует толькоцена

    E1 price     E5000 price
day1   1 ........  1
..                 ..
..                 ..
day751 ........... 1  

Ответы [ 3 ]

5 голосов
/ 31 января 2012

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)
  • , если данныена самом деле происходит из файла, а не из текста, затем замените 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))

В результате получается следующий объект зоопарка:

> 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
2 голосов
/ 31 января 2012

Взгляните на 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
> 
2 голосов
/ 31 января 2012

Используйте as.matrix().Смотри help(as.matrix).

...