2010-02-12 2 views
3

У меня есть 30 прогонов данных, каждый из которых хранится в отдельном файле CSV, runi.csv, i = 0:29.R - идиоматический способ обработки списков кадров данных

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

runs = list() 
for (i in 1:30) { runs[[i]] = read.csv(paste("run", i-1, ".csv")); } 

Теперь давайте дальше сказать, что каждый из этих кадров данных, сохраненных в списке имеет те же макеты столбцов и что я заинтересован в колонке, идентифицированной «х» и столбец, обозначенный буквой «y».

Что является самым простым способом построить все 30 пробегов (пары x, y)? Вот как бы я в настоящее время сделать это (и я чувствую, что должен быть лучший способ):

xList = list() 
yList = list() 
for (i in 1:30) { xList[[i]] = runs[[i]]$x; yList[[i]] = runs[[i]]$y; } 
matplot(x=as.data.frame(xList), y=as.data.frame(yList)) 

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

Любая помощь здесь была бы чрезвычайно полезна.

ответ

3

Возможно, лучше использовать функцию l * ply (от plyr) или lapply при работе со списками, подобными этому.

Самый простой способ сделать импорт, вероятно, так:

library(plyr) 
runs <- llply(paste("run",1:30,".csv",sep=""), read.csv) 

Вот один из способов построить их:

# some dummy data 
runs <- list(a=data.frame(x=1:5, y=rnorm(5)), b=data.frame(x=1:5, y=rnorm(5))) 
par(mfrow=c((length(runs)/2),2)); 
l_ply(1:length(runs), function(i) { plot(runs[[i]]$x, runs[[i]]$y) }) 

Конечно, вы можете также выводить это на другое устройство (например, pdf) и не использовать par().

+1

пробегов <- llply (паста ("прогонов", 1: 30, "CSV", сентябрь = ""), читать. csv) очень гладкий - и работает с лапкой, если вы не хотите включать plyr. Bravo – I82Much

5

Возможно, вам было бы намного лучше создавать один кадр данных со всеми данными. Например, добавьте номер запуска при импорте (runs[[i]] = data.frame(read.csv(paste("run", i-1, ".csv")), Run=i)), а затем выполните alldata <- do.call(rbind, runs).

Теперь вы можете использовать lattice или ggplot2, чтобы сделать участки. Например, чтобы получить диаграмму рассеяния всех прогонов с использованием различных цветов бегом делать:

library(ggplot2) 
qplot(x, y, colour=Run, data=alldata, geom="point") 
Смежные вопросы