Как создавать многострочные графики из коллекции файлов rdta - PullRequest
2 голосов
/ 25 мая 2011

У меня более 100 файлов данных обследования со следующей структурой имени файла в общем каталоге:

BD-1994.rdta
BD-1996.rdta
BD-1999.rdta
BD-2004.rdta
BF-1992.rdta
...
UG-1988.rdta
UG-1995.rdta
UG-2001.rdta
VN-1992.rdta
VN-1997.rdta

Первые две буквы (например, «BD») представляют конкретную страну (по коду ISO) ичетыре цифры представляют год данного опроса.

Я хотел бы обработать эти данные, чтобы я мог создать один многострочный график временных рядов коэффициентов рождаемости на страну, где каждая строка представляет годопрос.Например, первый график будет для «BD» (Бангладеш) и будет отображать четыре временных ряда за 1994, 1996, 1999 и 2004 годы.

Структура отдельных файлов следующая:

time     fertility
1        3.2
2        2.6
...      ...
7        2.4 

Моя идея на данный момент - использовать rbind внутри цикла for и создать один массивный набор данных со всеми данными в нем.Затем мне нужно аккуратно разделить данные по коду страны, возможно, с помощью функции, подобной «подмножеству» (но не похоже, что подмножество является правильным инструментом для работы.

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

Спасибо

1 Ответ

3 голосов
/ 25 мая 2011

Вот один подход, использующий ggplot2 и plyr.Основная идея заключается в создании двух вспомогательных функций для (а) извлечения данных из каждого файла rdata в кадр данных и (б) построения временных рядов для каждой страны.После того, как эти функции определены, относительно просто использовать функции plyr для циклического перемещения по файлам для получения необходимых графиков.Я бы посоветовал вам запустить этот код для ваших данных и сообщать о любых полученных ошибках, поскольку я не могу проверить свой код при отсутствии каких-либо данных.

require (plyr)

# function to extract data frame from each rdata file
get_data_frame = function(file_name){
    temp_env = new.env()
    load(file_name, temp_env)
    mydata  = get(ls(envir = temp_env), temp_env)
    country = substr(file_name, 1, 2)
    year    = substr(file_name, 4, 7)
    df = data.frame(mydata, country, year)
    return(df)
}

# function to save time series plot of fertility grouped by year
plot_country_data = function(country_df){

    require(ggplot2)
    p1 = ggplot(country_df, aes(x = time, y = fertility)) +
         geom_line(aes(group = year))
    ggsave(filename = paste(country_df, ".pdf", sep = ""))

}

# extract all rdata files in working directory
rdata_files = list.files(pattern = 'rdata')

# consolidate data into one big data frame
big_data   = ldply(rdata_files, get_data_frame)

# plot data for each country and save as pdf
d_ply(big_data, .(country), plot_country_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...