2012-02-01 2 views
1

Я относительно новичок в R. Я объединяю данные, содержащиеся в нескольких файлах csv, в один объект zoo.zoo merge() и имена объединенных столбцов

Вот фрагмент кода в моей цикл:

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

ответ

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

Это на самом деле следует @ Эндри подход – aatrujillob

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'] 
+1

У меня есть два вопроса. (1) - метод, который вы описываете масштабируемым ?. Мне нужно загрузить около 1K файлов. (2) Могу ли я получить доступ к строке данных (т. Е. Для данной DATE) по всем загруженным временным рядам ?. Если да, то какой синтаксис - это будет что-то вроде: datMerged ["2011-01-01",]? –

+0

@HomunculusReticulli: (1) Я так думаю; [этот поток] (http://r.789695.n4.nabble.com/Merging-lot-of-zoo-objects-td898044.html) дает некоторые полезные комментарии об этом; (2) с зоопарком вы должны использовать метод 'window', а пакет' xts' предлагает больше методов; см. мой отредактированный текст. –

Смежные вопросы