zzkpumc的个人博客分享 http://blog.sciencenet.cn/u/zzkpumc

博文

初识R语言

已有 7246 次阅读 2011-1-4 11:37 |个人分类:数学笔记|系统分类:科研笔记| R语言, SAS语言, 计划免疫

在R方面,曾尝试把数据库从SAS到R的迁移的尝试,因为经过近半个月的学习,基本掌握了R的数据结构特点,使用R管理数据的确是比SAS更明智的选择。试着把日常管理的唐山市人口数据库迁移到R过程中,曾经遇到过一个小难题,就是使用read.xpt命令,根本无法读取SAS的ssd数据文件,经过尝试发现,应该使用read.ssd来直接读取。其先决条件是在同一台电脑上要同时安装有SAS核心软件或者SAS viewer,在read.ssd读取数据过程中,首先需要调用SAS。读取的数据可以直接保存为R的object。一旦迁移成功,就可以发挥R机动灵活的数据管理功能了。我保存的人口数据维度较高,而且是汇总数据,管理这类数据,R有得天独厚的专长。

人口数据表单包含了2004-2009年唐山市14个县市区分年度、分性别(男女)、分年龄组(26个)的人口数、及百分比。使用SAS管理这类数据,浪费的空间的确很大,比如年度、县区、年龄组等均为重复值,同时,男女人口数可以间接计算出各年龄组男女人口占当年人口的百分比,百分比构成显然又是冗余信息。在SAS中或者这样保存数据,或者使用多个数据集保存上述信息。但是空间的占用无论如何都不小。

上述数据集迁移到R后,得到一个data.frame,直接存盘,在系统命令下检查,发现这个object只有原来1/4大小,节省的空间还是很大的,同时,使用R的逻辑表达式可以非常方便地选取规定条件的数据子集,运算速度远远超过SAS软件。

根据唐山市人口数据表的特点,可以构造一个树状结构的数据list来管理这个数据集。该数据列表的根是唐山市,14个县市区为第一代,每个县市区下包含一个(7,26,2)维的矩阵,其中矩阵的第一维度代表年份,第二维代表年龄组,第三维代表性别。

List的一个特点就是可以包含任何类型的合法数据,因此,我们可以编制一系列的函数,分别求出每个县市区某个年度某个年龄组的总人口、人口比例等,并且把该函数设置为动态链接。这样只要数据矩阵有变动,相应的合计数以及比例等都要变动。

如果能够实现该功能,在我手里,R就是真正超过了SAS。

回想一下,二维表数据格式虽然是大部分流行软件如SAS、SPSS、STATA等通用的基本数据管理模式,但是,这种模式的确不符合人们的思维习惯,更与现实需要相差甚远。一个简单的例子就是家庭数据的管理。每个家庭可能有不同的成员,每个家庭成员可能有不同的属性。使用二维表的模式,就需要预先设定好全部家庭成员的所有属性,否则,就有研究因素被遗漏,而无法进行电子化管理。一个例子来自免疫规划管理的日常工作,即儿童接种记录的管理。该记录除了每个儿童的共有属性如姓名、性别、出生日期、家庭住址外,核心内容就是疫苗接种史。现有的管理方式是为每个儿童预先设定了可能接种的所有疫苗的名称。如果接种该疫苗,就在这个名称下填写具体的接种时间,否则,就永远为空项。

如果使用R的list理念,来设计树状结构的object,管理这两类数据,似乎就非常容易。使用list的下标索引可以很好地检索所需信息,在list中设置好链接函数,可以实现目前统计报表中的所有指标。

如果最近几年现有的免疫规划管理模式不发生大变化,的确可以考虑设计一个class,来管理目前的接种数据,数据一旦迁移到这个class,就可以使用预先设定的函数,提取所有统计结果。



https://blog.sciencenet.cn/blog-471257-400860.html

上一篇:游泳、VOA和R语言
下一篇:红茶、咖啡和蟑螂——怀念协和基础所的日子
收藏 IP: .*| 热度|

0

发表评论 评论 (2 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-17 16:32

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部