2012-02-01 62 views
1

我對R相對較新。我將包含在多個csv文件中的數據合併到一個動物園對象中。動物園合併()和合並的列名

這裏是代碼的我for循環一個片段:

temp <- read.csv(filename, stringsAsFactors=F) 
temp_dates <- as.Date(temp[,2]) 
temp <- zoo(temp[,17], temp_dates) 
dataset <- temp[seq_specified_dates] 

# merge data into output 
if (length(output) == 0) 
    output <- dataset 
else 
    output <- merge(output, dataset, all=FALSE) 

當我運行頭()輸出動物園對象上,我注意到奇怪的命名列的名稱,如:「dataset.output。 output.output'等。我如何分配更有意義的名稱到合併列。 ?

另外,如何引用動物園對象中的特定列?例如,如果輸出是一個數據框,我可以引用'Patient_A'列作爲輸出$ Patient_A。如何引用合併的動物園對象中的特定列?

+2

如果您先將所有csv文件合併到一個data.frame中,然後檢查您的數據幀是否具有所有正確的列,然後再將單個data.frame轉換爲動物園對象,這將會簡單得多。 – Andrie 2012-02-01 08:59:12

回答

1

我覺得不管日期屬一類動物園的這會工作,如果你提供一個例子,我可能能夠解決的細節,但所有這一切應該是一個很好的起點。

#1- Put your multiple csv files in one folder 
setwd(your path) 
listnames = list.files(pattern=".csv") 

#2-use package plyr 
library(plyr) 

    pp1 = ldply(listnames,read.csv,header=T) #put all the files in on data.frame 
    names(pp1)=c('name1','name2','name3',...) 
    pp1$date = zoo(pp1$date) 


# Reshape data frame so it gets organized by date 
pp2=reshape(pp1,timevar='name1',idvar='date',direction='wide') 
+0

這實際上遵循@Andrie方法 – aatrujillob 2012-02-01 10:12:22

1

read.zoo能夠讀取和合並多個文件。例如:

idx <- seq(as.Date('2012-01-01'), by = 'day', length = 30) 

dat1<- data.frame(date = idx, x = rnorm(30)) 
dat2<- data.frame(date = idx, x = rnorm(30)) 
dat3<- data.frame(date = idx, x = rnorm(30)) 

write.table(dat1, file = 'ex1.csv') 
write.table(dat2, file = 'ex2.csv') 
write.table(dat3, file = 'ex3.csv') 

datMerged <- read.zoo(c('ex1.csv', 'ex2.csv', 'ex3.csv')) 

如果你想訪問一個特定的列,您可以使用$方法:

datMerged$ex1.csv 

編輯: 可以提取與window方法的時間段:

window(datMerged, start='2012-01-28', end='2012-01-30') 

xts包中包含更多提取方法:

library(xts) 
datMergedx['2012-01-03'] 
datMergedx['2012-01-28/2012-01-30'] 
+1

我有兩個問題。 (1)是你描述的可擴展的方法嗎?我需要加載大約1K個文件。 (2)我是否可以在所有加載的時間序列中訪問一行數據(即對於給定日期)?如果是的話,語法是什麼 - 它會是這樣的:datMerged [「2011-01-01」,]? – 2012-02-01 16:08:57

+0

@HomunculusReticulli:(1)我這麼認爲; [該線程](http://r.789695.n4.nabble.com/Merging-lot-of-zoo-objects-td898044.html)給出關於它的一些有益的意見; (2)動物園你必須使用'window'方法,'xts'包提供更多的方法;看我編輯的文本。 – 2012-02-02 17:46:20