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语言学习 第三篇:数据框

posted @   郝hai  阅读(3600)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示