Матрица корреляции между разными файлами

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

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

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

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


person sbg    schedule 03.06.2011    source источник


Ответы (1)


Я думаю, что на самом деле у вас есть кости совершенно хорошего решения. Если вы начнете с 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 минус первый столбец. Возможно, вам придется немного изменить этот код, но эта общая идея должна работать.

person joran    schedule 03.06.2011
comment
спасибо за ваш код, но он не работает, и я не могу понять, почему. Data.frame dat выглядит так: Index pp3195 pp2030 pp2059 ppNA pp2113 ppNA pp2234.1 ppNA pp2290 ppNA pp2422 ppNA 18592 2010-12-26 0.0 NA NA 0 0 0.0 0.0 NA Итак, он не читает некоторые суффиксы, и они, кажется, тоже не по порядку, поэтому я не могу понять, кто есть кто. Есть идеи, почему? - person sbg; 06.06.2011
comment
Трудно сказать без прямого взгляда на ваши полные данные. ppNA предполагает, что у вас есть несколько файлов с NA в столбце кода, а pp2234.1 предполагает, что у вас либо нецелочисленный код, либо дублирующиеся коды (два файла для кода 2234). Мой код поместит столбцы в том порядке, в котором они появляются в list.files; вы можете изменить их порядок, приведя имена столбцов к символам и используя order(). - person joran; 06.06.2011
comment
спасибо, у меня действительно было несколько NA в коде, которые вызывали проблемы - person sbg; 08.06.2011