Матрица корреляции между разными файлами - PullRequest
1 голос
/ 03 июня 2011

У меня 82 файла .csv, каждый из которых представляет собой объект зоопарка, в следующем формате:
"Index", "code", "pp"<br> 1951-01-01, 2030, 22.9<br> 1951-01-02, 2030, 0.5<br> 1951-01-03, 2030, 0.0

Я хочу создать матрицу корреляции между pp всех моих файлов.Я узнал, как сделать это «вручную» между двумя файлами:
zz<-merge(x,y, all = FALSE)<br> z<-cbind(zz[,2], zz[,4])<br> cor(z,use= "complete.obs")

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

Кто-нибудь может помочь?

1 Ответ

4 голосов
/ 03 июня 2011

Я думаю, у вас действительно есть отличное решение.Если вы начинаете с list.files() для создания списка ваших CSV-файлов:

fileList <- list.files(path="path/to/csv/files")

, затем читайте все файлы, используя lapply():

datList <- lapply(fileList,read.csv)

, затем объедините первые двафайлы (при условии, что код одинаков для каждого файла):

dat <- merge(datList[[1]][,-2],datList[[2]][,-2],by="Index",
        suffixes=c(datList[[1]]$code[1],datList[[2]]$code[1]))

Аргумент suffixes поможет вам назвать столбцы по коду для дальнейшего использования.Затем переберите остальную часть datList, используя простой цикл for, объединяя каждый из них с dat:

for (i in 3:length(datList)){
    dat <- merge(dat,datList[[i]][,-2],by="Index",suffixes=datList[[i]]$code[1])
}

, и тогда вы сможете запустить cor для dat минус первый столбец.Возможно, вам придется немного подправить этот код, но эта общая идея должна сработать.

...