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语言学习 第三篇:数据框
data.frame数据框操作——R语言的更多相关文章
- R语言Data Frame数据框常用操作
Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的. Data Frame每一列有列名,每一行也可 ...
- 转载:R语言Data Frame数据框常用操作
Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的. Data Frame每一列有列名,每一行也可 ...
- R: data.frame 数据框的:查询位置、排序(sort、order)、筛选满足条件的子集。。
################################################### 问题:数据框 data.frame 查.排序等, 18.4.27 怎么对数据框 data.f ...
- R: data.frame 生成、操作数组。重命名、增、删、改
################################################### 问题:生成.操作数据框 18.4.27 怎么生成数据框 data.frame.,,及其相关操 ...
- (数据科学学习手札07)R在数据框操作上方法的总结(初级篇)
上篇我们了解了Python中pandas内封装的关于数据框的常用操作方法,而作为专为数据科学而生的一门语言,R在数据框的操作上则更为丰富精彩,本篇就R处理数据框的常用方法进行总结: 1.数据框的生成 ...
- 数据攻略●R语言自述
(注明:以下文章均在Linux操作系统下执行) 一.R语言简介 R语言是用于统计分析,图形表示和报告的编程语言和软件环境.R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大 ...
- (数据科学学习手札06)Python在数据框操作上的总结(初级篇)
数据框(Dataframe)作为一种十分标准的数据结构,是数据分析中最常用的数据结构,在Python和R中各有对数据框的不同定义和操作. Python 本文涉及Python数据框,为了更好的视觉效果, ...
- 用数据说话,R语言有哪七种可视化应用?
今天,随着数据量的不断增加,数据可视化成为将数字变成可用的信息的一个重要方式.R语言提供了一系列的已有函数和可调用的库,通过建立可视化的方式进行数据的呈现.在使用技术的方式实现可视化之前,我们可以先和 ...
- 吴裕雄--天生自然python学习笔记:pandas模块读取 Data Frame 数据
读取行数据 读取一个列数据的语法为: 例如,读取所有学生自然科目的成绩 : import pandas as pd datas = [[65,92,78,83,70], [90,72,76,93,56 ...
- R语言基础:数组&列表&向量&矩阵&因子&数据框
R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...
随机推荐
- 第一个程序,Hello,World!
Hello World 创建一个文件夹,存放代码 新建一个java文件 后缀名为.java 编写代码 public class Hello{ public static void main(st ...
- k8s集群部署kafka
一.部署步骤 1.部署NFS并挂载共享目录 2.部署zookeeper集群 3.部署kafka集群 4.测试kafka 二.部署NFS并挂载共享目录 注:使用云产品的NAS存储可跳过此步骤 1.服务端 ...
- 如何卸载cdr x8?怎么把cdr x8彻底卸载删除干净重新安装的方法【转载】
标题:如何卸载cdr x8?怎么把cdr x8彻底卸载删除干净重新安装的方法.cdr x8显示已安装或者报错出现提示安装未完成某些产品无法安装的问题,怎么完全彻底删除清理干净cdr x8各种残留注册表 ...
- mybatis核心配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- org.nutz.http.Http忽略https SSL证书验证
访问的是一个https get请求,报错需要SSL证书验证,以下方法直接跳过 boolean check = Http.disableJvmHttpsCheck(); // 忽略https的证书检查
- python中将各种类型表达式中的 \ 符号,都看作转义符
python中将各种类型表达式中的 \ 符号,都看作转义符,如 \n 代表换行 \t 代表空tab,还发现 \a 相当于什么都不是,改行末尾的 \ 的意思是该行还没写完,接着下边一行的内容. 转义 ...
- JS实现一个函数getType获取所有的数据类型
1 function getType(obj) { 2 if (obj === null) { 3 return String(obj) 4 } 5 const toType = (obj) => ...
- Q:带宽检测 iperf工具
一.下载 iperf的下载地址为:https://iperf.fr/iperf-download.php,选择相应的版本 linux安装 rpm -qa|grep -i rperf rpm -ivh ...
- NO_PUBKEY 76F1A20FF987672F
在ubuntu18.04上安装win时,执行sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic ...
- promise一脸懵逼...
// 要求:封装一个方法,能根据路径读取文件,并把内容返回 const fs=require('fs') const path=require('path') 1. 普通读取文件的方式 1 const ...