Использование read.zoo вместо read.table и zoo ()? - PullRequest
2 голосов
/ 18 ноября 2010

У меня есть файл с таким количеством строк

2010-01-12 19:40   1021.00000   0.00001     1.00
2010-01-12 19:50   1031.00000   0.00000     -1.00

Чтобы прочитать это как зоопарк, я использую

tmp <- read.table("myfile")
GOEMD <- zoo(tmp[,3], as.chron(paste(tmp[,1],tmp[,2]), format="%Y-%m-%d %H:%M"))

, который работает правильно Но я бы хотел использовать read.zoo() вместо.

Я пытался

f <- function(x)  as.chron(paste(tmp[,1],tmp[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN  = f)

и даже указав

colClasses= c("character","character","numeric","numeric","numeric")

но это не работает; это говорит: строка 136 (та, которую я вставил выше) не имеет 14 элементов.

Я также пробовал:

tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN  = as.chron)

Ответы [ 2 ]

3 голосов
/ 19 ноября 2010
  1. Опечатка в f уже была указана.
  2. Также есть несколько функций read.zoo, которыми вы можете воспользоваться. Во-первых, обратите внимание, что если значение аргумента index является списком, то столбцы, на которые есть ссылки в каждом компоненте этого списка, передаются в FUN как отдельные аргументы. Также обратите внимание, что имеется аргумент FUN2, который применяется к выводу FUN, поэтому мы можем записать его в компактной форме, например:

Таким образом попробуйте это:

library(zoo)
library(chron)

Lines <- "2010-01-12 19:40   1021.00000   0.00001     1.00
2010-01-12 19:50   1031.00000   0.00000     -1.00"

z <- read.zoo(textConnection(Lines), index = list(1, 2), 
        FUN = paste, FUN2 = as.chron)

Выше было написано, чтобы быть автономным, чтобы вы могли просто скопировать его дословно в буфер обмена, а затем вставить его в ваш сеанс R. Чтобы использовать его с вашим файлом, замените textConnection(Lines) на "myfile".

2 голосов
/ 18 ноября 2010

Ваша функция f должна искать tmp.Вы, вероятно, намеревались:

f <- function(x)  as.chron(paste(x[,1],x[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f)

Кроме того, размещенные вами образцы данных выглядят так, как будто они разделены табуляцией, а не пробелами, поэтому вам может понадобиться это вместо этого:

tmp <- read.zoo("myfile", index = 1, sep="\t", FUN = as.chron)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...