我对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)
当我在输出zoo对象上运行head()时,我注意到奇怪命名的列名,例如:'dataset.output.output.output'等。如何为合并的列分配更有意义的名称。 ?
另外,如何引用zoo对象中的特定列?例如,如果输出是数据帧,我可以将'Patient_A'列作为输出$ Patient_A引用。如何引用合并的zoo对象中的特定列?
答案 0 :(得分: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')
答案 1 :(得分: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
EDITED:
您可以使用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']