2010-11-18 15 views
2

我有這種使用read.zoo而不是read.table和zoo()?

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) 

回答

3
  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"

+0

嗨。有用。但是,我怎麼能只讀取前3行,我的意思是在同一行。如果我有一個變量,我寫myvar [1:3],但我怎麼才能直接使用文件名?歡呼聲 – skan 2010-11-22 21:23:58

+0

我找到了方法:read.zoo(「myfile.txt」,colClasses = c(「character」,「character」,「numeric」,「numeric」,「NULL」),index = list(1,2) ,FUN = paste,FUN2 = as.chron) – skan 2010-11-23 15:39:23

2

你的功能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) 
+0

對不起,錯字。無論如何,它不適合我。 – skan 2010-11-22 21:53:56