三、数据框数据框的数据形式,通常用于存储多种不同模式的数据,其每列是一个变量,每行是一个观测。一般用data.frame()函数来定义数据框。其基本格式为:data.frame(coll,col2,col3,..)其中,coll,col2,col3等为任意类型的列向量名。例2.8已知有5名学生的数据,如表所示。用数据框的形式读入数据表2.15名学生的基本信息年龄序号姓名性别身高(cm)体重(kg)女131张三156422男13李四165493女12王五15741.54赵六男13162525女12丁一15945.5解:R中计算过程如下:>sjk<-data.frame(姓名=c("张三","李四","王五","赵六","丁一")性别=c("女","男","女","男","女"),年龄=c(13,13,12,13,12),身高=c(156,165,157,162,159),体重=c(42,49,41.5,52,45.5))>sjk运行结果如下:姓名性别年龄身高体重1张三女1315642.02李四男1316549.0123王五女15741.54赵六男1316252.05丁一女1215945.5提取数据框中的元素有很多种方法,方法一,可以使用下标记号;方法二,可以直接指定列名;方法三,使用S来选取给定数据框中的某个特定的变量;方法四,使用attach()和detach()函数。前三种提取变量时,每次都需输入在变量名前输入一次数据框名比较重复,所有不妨使用atach()函数,将数据框添加到R的搜索路径中。R在遇到一个变量名以后,将检查搜索路径中的数据框,以定位到这个变量。detach()函数是将数据框从搜索路径中移除。detachO)函数对数据框本身不做任何处理。24
24 三、数据框 数据框的数据形式,通常用于存储多种不同模式的数据,其每列是一个变量, 每行是一个观测。一般用 data.frame( )函数来定义数据框。 其基本格式为:data.frame(col1,col2,col3,.) 其中,col1,col2,col3 等为任意类型的列向量名。 例 2.8 已知有 5 名学生的数据,如表所示。用数据框的形式读入数据。 表 2.1 5 名学生的基本信息 序号 姓名 性别 年龄 身高(cm) 体重(kg) 1 张三 女 13 156 42 2 李四 男 13 165 49 3 王五 女 12 157 41.5 4 赵六 男 13 162 52 5 丁一 女 12 159 45.5 解:R 中计算过程如下: > sjk<-data.frame(姓名=c("张三", "李四", "王五", "赵六", "丁一"), 性别=c("女", "男", "女", "男", "女"), 年龄=c(13, 13, 12, 13, 12), 身高=c(156, 165, 157, 162, 159), 体重=c(42, 49, 41.5, 52, 45.5)) > sjk 运行结果如下: 姓名性别年龄身高体重 1 张三女 13 156 42.0 2 李四男 13 165 49.0 3 王五女 12 157 41.5 4 赵六男 13 162 52.0 5 丁一女 12 159 45.5 提取数据框中的元素有很多种方法,方法一,可以使用下标记号;方法二, 可以直接指定列名;方法三,使用$来选取给定数据框中的某个特定的变量;方 法四,使用 attach()和 detach( )函数。前三种提取变量时,每次都需输入在变量名 前输入一次数据框名比较重复,所有不妨使用 attach( )函数,将数据框添加到 R 的搜索路径中。R 在遇到一个变量名以后,将检查搜索路径中的数据框,以定位 到这个变量。detach( )函数是将数据框从搜索路径中移除。detach( )函数对数据框 本身不做任何处理
例2.9采用不同方法提取例2.5中数据框中学生的姓名和身高。解:R中计算过程如下:法 1:>sjk[1]#使用下标运行结果如下:姓名1张三2李四3王五4赵六5 丁~> sjk[4]运行结果如下:身高11562165315741625159> sjk[c(1,4)]运行结果如下:姓名身高1张三1562李四1653王五1574赵六1625丁—159法2:>sjk["姓名"]#指定列名运行结果如下:姓名1张三2李四3王五25
25 例 2.9 采用不同方法提取例 2.5 中数据框中学生的姓名和身高。 解:R 中计算过程如下: 法 1: > sjk[1]#使用下标 运行结果如下: 姓名 1 张三 2 李四 3 王五 4 赵六 5 丁一 > sjk[4] 运行结果如下: 身高 1 156 2 165 3 157 4 162 5 159 > sjk[c(1,4)] 运行结果如下: 姓名身高 1 张三 156 2 李四 165 3 王五 157 4 赵六 162 5 丁一 159 法 2: > sjk["姓名"]#指定列名 运行结果如下: 姓名 1 张三 2 李四 3 王五
4赵六5 丁->sjk["身高"]运行结果如下:身高11562165315741625159>sjk[c("姓名""身高")]运行结果如下:姓名身高1张三1562李四1653王五1574赵六1625丁159法3>sjks姓名#使用s来选取特定的变量运行结果如下:[1]张三李四王五赵六丁一>sjks年龄运行结果如下:[1] 13 13 12 13 12>sjks身高运行结果如下:[1] 156 165 157 162 159>c(sjks年龄,sjks身高)运行结果如下:13[1] 13121312156165157162159法4:>attach(sjk)#将数据框添加到R的搜索路径中>姓名26
26 4 赵六 5 丁一 > sjk["身高"] 运行结果如下: 身高 1 156 2 165 3 157 4 162 5 159 > sjk[c("姓名","身高")] 运行结果如下: 姓名身高 1 张三 156 2 李四 165 3 王五 157 4 赵六 162 5 丁一 159 法 3: > sjk$姓名#使用$来选取特定的变量 运行结果如下: [1] 张三李四王五赵六丁一 > sjk$年龄 运行结果如下: [1] 13 13 12 13 12 > sjk$身高 运行结果如下: [1] 156 165 157 162 159 > c(sjk$年龄,sjk$身高) 运行结果如下: [1] 13 13 12 13 12 156 165 157 162 159 法 4: > attach(sjk)# 将数据框添加到 R 的搜索路径中 >姓名
运行结果如下:[1]张三李四王五赵六丁一Levels:丁一李四王五张三赵六>身高运行结果如下:[1] 156 165 157 162 159>c(姓名,身高)运行结果如下:[1]42351156165157162159>detach(sjk))#将数据框从搜索路径中移除>姓名运行结果如下:错误:找不到对象姓名四、列表列表是R中一种非常普遍而灵活的对象,它是一系列的数据对象的组合体,可将不同类型的数据对象置于同一数据名之下,是一个以对象的有序集合构成的对象。列表的元素可以用它们自己的方式单独列出,因此,列表被认为是一种递归结构,而不是原子结构。它像一个装满袋子的大箱子,每个袋子里都装满了各种不同的东西。可用list()函数生成列表,其基本格式如下:list(objectl,object2,...)...例2.10下表是关于妇女月经前后能量的数据,现用列表的形式读入数据。表 2.2 月经前后能量摄入量表567序号2348910111月经前能61806390651575157515823087705260547056406805量摄入量月经后能690073353910422038855160564554680526559756790量摄入量解:R中计算过程如下:>intake.pre<-c(5260,5470,5640,6180,6390,6515,6805,7515,7515,8230,8770)>intake.post<-c(3910,4220,3885,5160,5645,4680,5265,5975,6790,6900,7335)> srlist<-list(before=intake.pre,after=intake.post)> srlist运行结果如下:27
27 运行结果如下: [1] 张三李四王五赵六丁一 Levels: 丁一李四王五张三赵六 >身高 运行结果如下: [1] 156 165 157 162 159 > c(姓名,身高) 运行结果如下: [1] 4 2 3 5 1 156 165 157 162 159 > detach(sjk)# 将数据框从搜索路径中移除 >姓名 运行结果如下: 错误: 找不到对象'姓名' 四、列表 列表是 R 中一种非常普遍而灵活的对象,它是一系列的数据对象的组合体, 可将不同类型的数据对象置于同一数据名之下,是一个以对象的有序集合构成的 对象。列表的元素可以用它们自己的方式单独列出,因此,列表被认为是一种递 归结构,而不是原子结构。它像一个装满袋子的大箱子,每个袋子里都装满了各 种 不 同 的 东 西 。 可 用 list( ) 函 数 生 成 列 表 , 其 基 本 格 式 如 下 : list(object1,object2,.). 例 2.10 下表是关于妇女月经前后能量的数据,现用列表的形式读入数据。 表 2.2 月经前后能量摄入量表 序号 1 2 3 4 5 6 7 8 9 10 11 月经前能 量摄入量 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770 月经后能 量摄入量 3910 4220 3885 5160 5645 4680 5265 5975 6790 6900 7335 解:R 中计算过程如下: > intake.pre<-c(5260,5470,5640,6180,6390,6515,6805,7515,7515,8230,8770) > intake.post<-c(3910,4220,3885,5160,5645,4680,5265,5975,6790,6900,7335) > srlist<-list(before=intake.pre,after=intake.post) > srlist 运行结果如下:
$'before[1]52605470564061806390651568057515751582308770Safter[1]39104220388551605645468052655975679069007335数据框是基于列表构建而成的,也属于列表的一种。但是,对于属于数据框的列表对象有一些限制条件。数据框常常会被看作是一个由不同模式和属性的列构成的矩阵。它能以矩阵的形式出现,行列可以通过矩阵的索引习惯访问。第三节R中常用统计量的计算R语言中的常用统计函数,如表23所示。表2.3常用统计函数表函数功能求平均数mean(x)求中位数median(x)sd(x)求标准差求方差var(x)mad(x)求绝对中位数quantile(x,probs)求分位数求值域range(x)求和sum(x)求滞后差分diff(x,lag=n)求最小值min(x)求最大值max(x)求四分位差IQR(x)例2.11随机抽取10名成年男子,测得其血清中胆固醇水平(mmol/L)分别3.20,5.08,4.86,4.05.3.91.4.26.4.26.4.45.4.93.3.61,试计算其平均数、中位数、标准差、方差、绝对中位数、分位数、值域、和、滞后差分、最小值、最大值、四分位差。解:R中计算过程如下:>x<-c(3.20,5.08,4.86,4.05,3.91,4.26,4.26,4.45,4.93,3.61)>mean(x)运行结果如下:[1] 4.261> median(x)28
28 $`before` [1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770 $after [1] 3910 4220 3885 5160 5645 4680 5265 5975 6790 6900 7335 数据框是基于列表构建而成的,也属于列表的一种。但是,对于属于数据框 的列表对象有一些限制条件。 数据框常常会被看作是一个由不同模式和属性的列构成的矩阵。它能以矩阵 的形式出现,行列可以通过矩阵的索引习惯访问。 第三节 R 中常用统计量的计算 R 语言中的常用统计函数,如表 2.3 所示。 表 2.3 常用统计函数表 函数 功能 mean(x) 求平均数 median(x) 求中位数 sd(x) 求标准差 var(x) 求方差 mad(x) 求绝对中位数 quantile(x,probs) 求分位数 range(x) 求值域 sum(x) 求和 diff(x,lag=n) 求滞后差分 min(x) 求最小值 max(x) 求最大值 IQR(x) 求四分位差 例 2.11 随机抽取 10 名成年男子,测得其血清中胆固醇水平(mmol/L)分 别 3.20,5.08,4.86, 4.05,3.91,4.26,4.26,4.45,4.93,3.61,试计算其平均数、中位数、标准差、方差、绝 对中位数、分位数、值域、和、滞后差分、最小值、最大值、四分位差。 解:R 中计算过程如下: > x<-c(3.20,5.08,4.86,4.05,3.91,4.26,4.26,4.45,4.93,3.61) > mean(x) 运行结果如下: [1] 4.261 > median(x)