data.frame数据框操作——R语言
统计分析中最常见的原始数据形式是类似于数据库表或Excel数据表的形式。 这样形式的数据在R中叫做数据框(data.frame)。 数据框类似于一个矩阵,但各列允许有不同类型:数值型向量、因子、字符型向量、日期时间向量。 同一列的数据类型相同。 在R中数据框是一个特殊的列表, 其每个列表元素都是一个长度相同的向量。数据框(data.frame)是最常用的数据结构,用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同数据列的数据类型可以相同,也可以不同,但是每列的行数(长度)必须相同。数据框的每列都有唯一的名字,在已创建的数据框上,用户可以添加计算列,这样,R引擎根据同一行的数据列,计算出表达式的值,并把该值作为计算列的值。数据框是数据分析中最重要的数据对象,必须熟练掌握数据框的操作。
一、Tidy Data数据结构
R语言的数据框、tibble数据都是tidy data。一般都需要将其他各种数据都整理成tidy data,形成一种一致的数据格式,再利用某些包(例如tidyr,dplyr,ggplot2都是tidyverse的核心包)中的tidy tools就很容易对数据进行各种分析;另外tidy data中变量单独成列的一个好处是它允许R的向量化特性发挥作用,R的许多内置函数(比如mutate和summary函数)都在向量上进行工作。
在R中进行数据挖掘要求数据集具有tidy data的特征,这有点类似数据库中的范式结构:
- 每一个变量都有自己独立的一列
- 每一个观测值都有自己独立的一行
- 每一个数据都是独立的单元格
二、data.frame数据的创建与转换
2.1 创建数据框
创建数据框,常用的方式是:读取文件、读取关系表和使用函数创建,用户应根据实际的需要,选择合适的方式创建数据框。
读取文件,常用的是用于读取文件的函数是read.table(),ead.csv()是read.table()的包装函数,专门用于读取csv文件。
dd1=read.table("titanic.txt",header=T)
dd2=read.table("titanic.txt",header=T,row.names=1)
#加载打开Excel文件包
library(openxlsx)
dd3=read.xlsx("hh2.xlsx")
dd4=read.xlsx("hh2.xlsx",colNames = TRUE)
dd5=read.xlsx("hh2.xlsx",colNames = TRUE,rowNames = TRUE)
dd6=read.csv("hh.csv",header = FALSE, sep = ";")
读取关系表数据,从关系型数据库执行SQL查询,根据查询结果创建数据框;当连接SQL Server数据库时,使用ODBC驱动程序连接数据库,R脚本引用RODBC包,调用odbcConnect连接,使用sqlQuery执行查询,获取查询结果填充数据框。
使用函数创建,通过函数 data.frame()创建数据框,用户需要输入指定的数据填充数据框变量,函数data.frame()的参数row.names用于指定行的标识符。
library(dplyr) #导入dplyr包
options(digits = 0) #保留整数
df <- data.frame(ID = 1:12, #ID
Class = rep(c(1,2,3),4), #班级
Chinese = runif(12,min = 0,max = 100), #语文
Math = runif(12,min = 0,max = 100), #数学
English = runif(12,min = 0,max = 100)) #英语
for (i in 1:ncol(df)) {
df[,i] <- as.integer(df[,i]) #将每列类型变为integer型
}
2.2 数据长宽转化(二维表与一维表转换)
下面创建一个数据df,然后来进行数据长宽转化实例操作。

宽数据转成长数据,这里使用gather函数,gather函数涉及三个参数
library(tidyverse)
# create data
df=data.frame(id=c(1:3),
Shanghai=c(2,5,3),
Beijing=c(12,23,16),
Guangdong=c(7,3,6))
#long data
df_a=df %>% gather("Name","value",-id)
#wide data
df_a %>% spread("Name",-id)
宽数据转成长数据,这里使用spread函数,spread函数涉及2个参数

三、数据框的基本操作
3.1 修改行列名
可用rownames()及colnames()得到数据框的行列名,rownames(data.frame)[行号] 或 colnames(data.frame)[列号] 可得到指定位置的行名或者列名,若修改直接赋值给该变量即可。
#接2.1中数据df
colnames(df) #查询列名
colnames(df)[4] #查询第4列列名
colnames(df)[4] <- "math" #修改第4列列名为math
colnames(df) <- c("ID","Class","Chinese","Math","English")
3.2 添加和删除行列
#接2.1中数据df
df <- df[-3,] #删除df第3行
df <- df[,-2] #删除df第2列
df$Physics <- c(23,34,67,23,56,67,78,23,54,56,67,34)
df[13,] <- c(13,2,62,19,38) #新增13行数据
3.3 数据框多列选取
#接2.1中数据df
df <- df[,c(1,3,5)] #选出df第1、3、5列
df <- df[,1:3] #选择第1到3列
df$math #选择列名math列
3.4 数据框的编辑
#接2.1中数据df
xnew=edit(df)
四、数据框操作进阶
#接2.1中数据df
mutate(df,Chemistry = Chinese + Math + English + Physics)
arrange(df,Chinese) #按语文成绩由小到大排序
arrange(df,Chinese,Math) #依次按语文、数学成绩由小到大排序
arrange(df,desc(Chinese)) #按语文成绩由大到小排序
df1 <- df[rep(1:nrow(df),each = 2),] #将df每行复制1次
df1 <- distinct(df1) #去除重复的行
select(df,ID,Chinese,Math,English) #选出df中ID、语文、数学、英语数据
#接2.1中数据df
df %>%
group_by(Class) %>%
summarise(max = max(Chinese)) #求出按Class分组每组中语文成绩最高分
df %>%
group_by(Class) %>%
filter(Chinese == max(Chinese))
df1 <- data.frame(ID = 13,Class = 2,
Chinese = 65,Math = 26,English = 84)
rbind(df,df1)
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),
blood_type = c("A","B","O","AB"))
test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
group = c("group1","group1","group2","group2"),
vision = c(4.2,4.3,4.9,4.5))
merge(test1,test2,by="name") #by="name",共同的列
#根据值匹配合并数据框:左连接、右连接、全连接、内连接、半连接、反连接
left_join(x, y, by)
right_join(x, y, by)
full_join(x, y, by)
inner_join(x, y, by)
semi_join(x, y, by)
anti_join(x, y, by)
总结
数据框是仅次于向量的最重要的数据类型对象,是R语言中最常处理的数据结构。数据框是一种表格式的数据结构,数据框旨在模拟数据集。R语言的分析,建模大部分都是基于data.frame数据结构,由rows和columns组成。data.frame每一个column会存储同样的数据类型,可以是numeric, factor, character。
参考文献
1.[R for Data Science总结之——Tidy Data](https://blog.csdn.net/weixin_38423453/article/details/82969121)
2.R语言data.frame的常用操作总结
3.R语言学习 第三篇:数据框
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)