zoo merge () и объединенные имена столбцов - PullRequest
1 голос
/ 01 февраля 2012

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

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

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)

Когда я запускаю head () для объекта выходного зоопарка, я замечаю странно названные имена столбцов, такие как: 'dataset.output.output.output' и т. Д. Как я могу назначить более значимые имена объединенным столбцам.

Кроме того, как мне ссылаться на определенный столбец в объекте зоопарка ?. Например, если выходные данные представляли собой фрейм данных, я мог бы сослаться на столбец «Patient_A» как выходной файл $ Patient_A. Как мне сослаться на определенный столбец в объединенном объекте зоопарка?

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

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 method:

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 голос
/ 01 февраля 2012

Я думаю, что это сработает независимо от того, является ли класс зоопарком, если вы приведете пример, я смогу исправить детали, но в целом это должно стать хорошей отправной точкой.

#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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...