问题描述
||
我在公共目录中有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
目前,我的想法是在for循环中使用rbind并创建一个包含所有数据的海量数据集。
然后,我需要按国家/地区代码整齐地拆分数据,也许使用\“ subset \”之类的功能(但是看起来subset并不是完成这项工作的正确工具。
关于如何执行此数据管理的任何建议,这样我就可以在包含给定国家/地区所有年份的调查数据的数据框中调用R中的plot函数?
谢谢
解决方法
这是使用
ggplot2
和plyr
的一种方法。基本思想是创建两个帮助函数,以(a)从每个“ 4”文件中提取数据到一个数据框中,以及(b)为每个国家绘制时间序列。一旦定义了这些函数,使用plyr
函数在文件中循环以产生所需的图形就相对简单了。我建议您对数据运行此代码,并报告任何错误,因为如果没有任何数据,我将无法测试代码。
要求(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)