购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.4 数据框

数据框也是R语言的一种数据结构,比矩阵应用更为广泛。数据框包括行、列数据,可以有多种数据类型,如图4.44所示。数据框具有以下特点。

(1)每列都有一个唯一的列名称,同列数据要求类型一致,不同列数据的类型可以不同。

(2)行名称应该是唯一的。

(3)存储在数据框中的数据可以是字符型、数值型或逻辑型。

图4.44 数据框示意图

4.4.1 创建数据框

使用data.frame()函数创建数据框,语法格式如下:

     data.frame(…,row.names = NULL,check.rows = FALSE,check.names = TRUE, fix.empty.names = TRUE,stringsAsFactors =
     default.stringsAsFactors())

参数说明如下。

…:列向量,可以是任何类型(字符型、数值型、逻辑型),一般以tag = value的形式表示,也可以是value。

row.names:行名,默认为NULL,可以设置为单个数字、字符串或字符串和数字的向量。

check.rows:检测行的名称和长度是否一致。

check.names:检测数据框的变量名是否合法。

fix.empty.names:检查未命名的参数是否自动设置名字。

stringsAsFactors:布尔值,字符是否转换为因子。

1.直接使用向量创建数据框

首先创建向量,然后使用data.frame()函数创建数据框。

【例4.11】 创建一个简单的数据框 (实例位置:资源包\Code\04\11)

使用data.frame()函数创建一个学生成绩表,运行RStudio,编写如下代码。

     1  # 创建数据框
     2  df = data.frame(
     3      姓名 = c("甲", "乙","丙","丁"),
     4      数学 = c(145,101,78,65),
     5      语文 = c(100, 120,132,110),
     6      英语 = c(100,80,76,91)
     7  )
     8  print(df)

运行程序,结果如图4.45所示。

2.使用函数读取文件返回数据框

R语言提供了读取各种文件返回数据框的函数,如文本文件、Excel文件、数据库中的数据、SPSS文件、SAS文件等。

【例4.12】 使用read.table()函数读取文本文件 (实例位置:资源包\Code\04\12)

使用read.table()函数读取“1月.txt”文本文件。运行RStudio,编写如下代码。

     1  setwd("D:/R程序/RProjects/Code")   # 设置工程路径
     2  df <- read.table("datas/1月.txt")  # 读取文本文件
     3  head(df)                           # 输出前6条数据

运行程序,结果如图4.46所示。

图4.45 学生成绩表

图4.46 读取文本文件

说明

关于读取各种文件的详细介绍参见第7章。

4.4.2 查看数据框信息

1.使用names()和colnames()函数查看、修改列名

获取例4.11中的列名,示例代码如下:

     names(df)     # 返回列名
     colnames(df)  # 返回列名

运行程序,结果如下:

     [1] "姓名" "数学" "语文" "英语"
     [1] "姓名" "数学" "语文" "英语"

修改第4列的列名为“外语”,示例代码如下:

     names(df)[4] <- '外语'  # 修改第4列的列名
     print(df)

运行程序,结果如图4.47所示。

图4.47 修改列名

2.使用row.names()和rownames()函数查看、修改行名

获取例4.11中的行名,示例代码如下:

     row.names(df)  # 返回行名
     rownames(df)   # 返回行名

运行程序,结果如下:

     [1] "1" "2" "3" "4"
     [1] "1" "2" "3" "4"

修改行名的示例代码如下:

     rownames(df)= c("r1","r2","r3","r4")  # 修改行名
     print(df)

运行程序,结果如图4.48所示。

图4.48 修改行名

     dimnames(df)  # 查看行名和列名

运行程序,结果如下:

     [[1]]
     [1] "1" "2" "3" "4"
     [[2]]
     [1] "姓名" "数学" "语文" "英语"
3.获取行列信息

获取行、列信息的示例代码如下:

     nrow(df)    # 返回行数
     ncol(df)    # 返回列数
     dim(df)     # 返回行列数

运行程序,结果如下:

     [1] 4
     [1] 4
     [1] 4 4
4.获取数据框结构信息

获取数据框结构信息的示例代码如下:

     str(df)

运行程序,结果如图4.49所示。

图4.49 获取数据框结构信息

5.显示数据框数据

显示数据框数据的示例代码如下:

     head(df)      # 默认返回前6行数据
     head(df,2)    # 返回前2行数据
     tail(df)      # 默认返回最后6行数据
     tail(df,2)    # 返回最后2行数据

运行程序,结果如图4.50所示。

图4.50 显示数据框数据

4.4.3 获取指定数据

通过指定列名可获取数据框中指定的数据。

【例4.13】 获取数据框中指定列的数据 (实例位置:资源包\ Code\04\13)

获取“姓名”和“数学”成绩。运行RStudio,新建一个R Script脚本文件,编写如下代码。

运行程序,结果如图4.51所示。

图4.51 获取数据框中指定列的数据

说明

上述代码中的“$”是S3类(R语言的类)的引用方式,比较常用,通常用于获取数据框、列表和向量中的某个变量,例如data1$姓名。

使用下标可以获取数据框中指定行列的元素。如使用x[i,j]可获取第i行第j列的数据。

【例4.14】 获取数据框中指定行列的元素 (实例位置:资源包\Code\04\14)

下面获取数据框中指定行列的数据。运行RStudio,编写如下代码。

运行程序,结果如图4.52所示。

图4.52 获取数据框中指定行列的数据

4.4.4 数据的处理

1.增加数据

假设原始数据如图4.53所示,下面介绍如何增加一列数据或增加一行数据。

1)增加一列数据

增加一列数据有两种方法:一是为指定列直接赋值;二是使用cbind()函数,按列合并数据。

【例4.15】 增加一列“物理”成绩 (实例位置:资源包\Code\04\15)

增加一列“物理”成绩,运行RStudio,编写如下代码。

运行程序,结果如图4.54所示。

【例4.16】 使用cbind()函数增加一列数据 (实例位置:资源包\Code\04\16)

下面使用cbind()函数增加一列“物理”成绩,运行RStudio,主要代码如下:

     1  df2 <- cbind(df1,物理=c(88,79,60,50))  # 增加一列物理
     2  print(df2)

2)增加一行数据

增加一行数据主要使用rbind()函数,需要注意的是,数据列名要一致且列数相同,否则报错。

【例4.17】 在成绩表中增加一行数据 (实例位置:资源包\Code\04\17)

在成绩表中增加一行数据,即“戊”同学的成绩,运行RStudio,主要代码如下:

     1  row <- c("戊",100,120,99)  # 创建向量
     2  df2 <- rbind(df1,row)      # 增加一行
     3  print(df2)

运行程序,结果如图4.55所示。

图4.53 原始数据

图4.54 增加一列物理成绩

图4.55 在成绩表中增加一行数据

2.删除数据

删除数据框中的数据与删除向量元素的方法相同,同样是采用负整数索引的方式将不需要的数据排除在外。

例如,删除第一行“甲”同学的成绩,输出剩余同学的成绩,示例代码如下:

     df <- df[-1,]

例如,删除第二列“数学”,示例代码如下:

     df <- df[,-2]
3.修改数据

修改数据框中的数据与矩阵的修改类似,首先找到索引位置,然后利用赋值语句进行修改。

【例4.18】 修改学生成绩数据 (实例位置:资源包\Code\04\18)

(1)修改整行数据。如修改“甲”同学的各科成绩,示例代码如下:

     df[1,2:4] <- c(120,115,109)

如果各科成绩均加10分,则可以直接在原有值加10,示例代码如下:

     df[1,2:4] <- df[1,2:4]+10

(2)修改整列数据。如修改所有同学的“语文”成绩,示例代码如下:

     df[,"语文"] <- c(115,108,112,118)

(3)修改某一数据。如修改“甲”同学的“语文”成绩,示例代码如下:

     df[1,"语文"] <- 115
4.查询数据

查询数据框中数据的方法有很多,下面分别进行介绍。

1)which()函数

which()函数可以查找特定的元素,并返回其在数据中的索引,因此在向量、矩阵、数据框、列表等数据结构中有着重要的作用。

如查询数学成绩大于100的数据,示例代码如下:

     which(df$数学 > 100)

运行程序,结果如下:

     [1] 1 2

这个结果返回的是索引位置。要想返回数据框,示例代码如下:

     df[which(df$数学 > 100),]

运行程序,结果如下:

     姓名 数学 语文 英语
     1   甲  145  100  100
     2   乙  101  120   80

2)subset()函数

subset()函数用于从某个数据框中筛选符合条件的数据或列。

(1)单条件查询。如查询性别为女的数据,示例代码如下:

     result<-subset(df,性别=="女")

(2)指定显示列。如查询性别为女,仅显示数学一列,示例代码如下:

     result<-subset(df,性别=="女",select=c(数学))

(3)多条件查询。如查询性别为女并且数学成绩大于120的数据,示例代码如下:

     result<-subset(df,性别=="女" & 数学>120,select=c(数学))

3)SQL语句

在R语言中,安装第三方sqldf包后,还可以使用SQL语句实现数据查询。

安装sqldf包的方法:在RStudio资源管理窗口中选择Packages,进入Install Packages窗口,输入包名sqldf,单击Install按钮,下载并安装sqldf包。

【例4.19】 使用SQL语句查询学生成绩数据 (实例位置:资源包\Code\04\19)

下面通过sqldf包使用SQL语句查询学生成绩数据,运行RStudio,编写如下代码。

运行程序,结果如图4.56所示。

图4.56 使用SQL语句查询学生成绩数据 ngdfxuF7ft8W6vT2sYx5xwGjmRefkWBmeSSyEPysOZ16ElbfCttsUHguCc3nffxH

点击中间区域
呼出菜单
上一章
目录
下一章
×