数据类型与数据结构 文件读写及绘图
文章目录
- 1. 数据类型与数据结构
- 1. 数据类型
- 2. 数据结构
- 1. 向量
- 2. 矩阵
- 3. 数据框
- 4. 列表
- 创建一个表格
- 2. 文件读写
- 1. 文件读取
- 2. 数据导出
- 3. 绘图
- 1. 基础包:plot() 函数
- 2. ggplot2包
- 1. 入门级绘图模板
- 2. aes映射
- 3. 分面
- 4. 几何对象
- 5. 统计变换
- 6. 位置关系
- 7. 坐标系
- 3. ggpubr包
- 4. 拼图
1. 数据类型与数据结构
**大部分代码及图片引用自生信技能树
1. 数据类型
数值型 numeric
字符型 character
逻辑型 logical
逻辑型分3种TRUE / TFALSE / FNA
2. 数据结构
1. 向量
向量可以有名字
scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony")
scores
scores["jimmy"]
scores[c("jimmy","nicker")]
names(scores)[scores>60]
2. 矩阵
- 矩阵新建
m <- matrix(1:9, nrow = 3)
colnames(m) <- c("a","b","c") #加列名
- 矩阵取子集
m[2,3]
m[2:3,1:2]
- 矩阵的转置和转换
t() #转置
as.data.frame() #转换
- 矩阵画热图
3. 数据框
数据框来源
1)用代码新建
2)由已有数据转换或处理得到
3)读取表格文件注意:数据框不允许重复的行名
4)R语言内置数据
新建和读取数据框
1)data.frame() 函数
df1 <- data.frame(gene = paste0("gene",1:4),change = rep(c("up","down"),each = 2),score = c(5,3,-2,-4))
df1
2)read.csv() 函数
数据框属性
1)行、列数
dim(df1)
nrow(df1)
ncol(df1)
2)行、列名
rownames(df1)
colnames(df1)
- 数据框取子集
1)按列(取向量)
df1$gene
2)按坐标
df1[2,2]
df1[c(1,3),1:2]
3)按名字
## 按名字
df1[,"gene"]
df1[,c('gene','change')]
4)按条件(逻辑值)
df1[df1$score>0,]
df1$gene[df1$score>0,] #y[x>0],x、y有对应关系
取数据框的最后一列
df1[,ncol(df1)]
取数据框除了最后一列以外的其他列
df1[,-ncol(df1)]
数据框修改
1)改一个格
df1[3,3] <- 5
2)改一列
df1$score <- c(12,23,50,2)
3)新增一列
df1$p.value <- c(0.01,0.02,0.07,0.05)
or
library(dplyr)
test #data.frame
#按行计算每个基因的方差
var_test <- apply(test, 1, var)
#新增一列,名字为var1,内容为等号右侧
test <- mutate(test, var1 = var_test)
#添加一列,将行名改为一列
deg <- mutate(deg,probe_id=rownames(deg))
4)改行名、列名
rownames(df1) <- c("r1","r2","r3","r4")
5)只修改某一行/列的名
colnames(df1)[2] <- "CHANGE"
两个数据框的连接
1)merge() 函数
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'), blood_type = c("A","B","O","AB"))
test1
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))
test2test3 <- data.frame(NAME = c('Damon','jimmy','nicker','tony'),weight = c(140,145,110,138))
test3
merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME") # 要连接的两列列名不同时
2)inner_join
deg <- inner_join(deg,ids,by="probe_id")
- 数据框的其它操作
排序 arrange
#对数据框的某一列排序(同一行不变),默认升序
test <- arrange(test, var1)
4. 列表
- 列表的新建
l <- list(m1 = matrix(1:9, nrow = 3),m2 = matrix(2:9, nrow = 2))
- 列表取子集
1)$
2)[[ ]]
创建一个表格
一个简单的表格是这么创建的:
数据结构 | 新建 | 取子集 |
---|---|---|
向量 x | x < - c() | x[n] |
数据框 df1 | data.frame() | df1[x, y],$新增列,修改 |
矩阵 m | matrix() | m[x, y] |
列表 l | list() | l[[n]], $ |
没有赋值,就没有发生过
一定要经常检查数据
2. 文件读写
1. 文件读取
文件读取
ex1 <- read.table("ex1.txt")
ex2 <- read.csv("ex2.csv")
默认参数不合适
# 把第一列设置为行名,列名不进行检查(-是特殊字符)
ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)
# 注意:数据框不允许重复的行名
rod = read.csv("rod.csv",row.names = 1)
# 先不加 row.names参数 进来
rod = read.csv("rod.csv")
# 多个空位时,fill=T不能解决,用read.delim()和fread()可以解决
soft <- read.table("soft.txt",header = T,fill = T) #其实不对
# sep="" 将多个看不见的空位或制表符识别为一个
soft2 <- read.table("soft.txt",header = T,sep = "\t")
2. 数据导出
1. 导出为csv
write.csv(soft,file = "soft.csv")
2. 保存为Rdata并加载
save(soft,file = "soft.Rdata")
load(file = "soft.Rdata")
3. 基础包作图得导出
4. ggplot系列图(包括ggpubr)通用的简便保存 ggsave
p <- ggboxplot(iris, x = "Species", y = "Sepal.Length",color = "Species", shape = "Species",add = "jitter")
ggsave(p,filename = "iris_box_ggpubr.png")
5. eoffice包 导出为ppt,全部元素都是可编辑模式
library(eoffice)
topptx(p,"iris_box_ggpubr.pptx")
3. 绘图
1. 基础包:plot() 函数
par(mfrow = c(2,2)) #把画板分成四块,两行两列
#如果报错,把右下角画板拉大一点即可
dev.off() #关闭画板
当一个代码需要复制粘贴三次,就应该写成函数或使用循环
2. ggplot2包
1. 入门级绘图模板
1. 作图数据,横纵坐标
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length))
属性设置(颜色、大小、透明度、点的形状,线型等)
1)手动设置,需要设置为有意义的值
ggplot(data = iris) + geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length), color = "blue")
ggplot(data = iris) + geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length), size = 5, # 点的大小5mmalpha = 0.5, # 透明度 50%shape = 8) # 点的形状
2)映射:按照数据框的某一列来定义图的某个属性
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species))
#自行指定映射的具体颜色
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species))+scale_color_manual(values = c("blue","grey","red"))
3)区分color和fill两个属性
空心形状和实心形状都用color设置颜色
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species),shape = 17) #17号,实心的例子
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species),shape = 2) #2号,空心的例子
既有边框又有内心的,才需要color和fill两个参数ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species),shape = 24,fill = "black") #24号,双色的例子
2. aes映射
3. 分面
1.分面
ggplot(data = iris) + geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) + facet_wrap(~ Species) #~在前竖着切,~在后横着切
2. 双分面
dat = iris
#letters
#dat$Group = sample(letters[1:5])
dat$Group = sample(letters[1:5],150,replace = T) #放回且可重复随机抽样
ggplot(data = dat) + geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) + facet_grid(Group ~ Species) #分组的行和列分类变量,Species这一列含有150个元素
4. 几何对象
几何对象可以叠加
局部设置和全局设置
ggplot(data = iris) + geom_smooth(mapping = aes(x = Sepal.Length, y = Petal.Length))+geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length))ggplot(data = iris,mapping = aes(x = Sepal.Length, y = Petal.Length))+geom_smooth()+geom_point()
5. 统计变换
- 直方图
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut)) #图形几何函数,默认stat="count"ggplot(data = diamonds) + stat_count(mapping = aes(x = cut)) #统计变换函数
- 不统计,直接作图
ggplot(data = fre) +geom_bar(mapping = aes(x = Var1, y = Freq), stat = "identity") #直接作图,而不统计
- count 改为 prop
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))#group=1 把所有数据当作一个整体
6. 位置关系
- 抖动的点图
ggplot(data = iris,mapping = aes(x = Species, y = Sepal.Width,fill = Species)) + geom_boxplot()+geom_point()
#抖动得点图
ggplot(data = iris,mapping = aes(x = Species, y = Sepal.Width,fill = Species)) + geom_boxplot()+geom_jitter()
- 堆叠直方图
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut,fill=clarity))
- 并列直方图
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
7. 坐标系
- 翻转坐标系
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot() +coord_flip() # x,y轴调换位置
- 极坐标系
bar <- ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = cut), width = 1) + theme(aspect.ratio = 1) +labs(x = NULL, y = NULL)
bar
bar + coord_flip()
bar + coord_polar()
3. ggpubr包
sthda上有大量ggpubr出的图
4. 拼图
R包 patchwork
数据类型与数据结构 文件读写及绘图相关推荐
- Scale 编程基础 A(变量声明、基本数据类型、运算符、文件读写、分支与循环、数据结构)
Scala: 变量声明.基本数据类型.运算符.文件读写.分支与循环.数据结构(List/Tuple/Range/Vector/Set/Map)与迭代器 变量声明 val:是不可变的,在声明时就必须被初 ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记四:数据类型与文件读写(附PPT链接)
变量类型与文件读写 前言 一.变量类型 1.numeric(数值类型) 2.char(字符类型) 3.string(字符串类型) 4.structure(结构体) 5.cell(元胞数组) 5.高维数 ...
- 数据结构与算法分析(一)——C++文件读写+py文件读写
string类 有了string就可以跟字符数组说拜拜了,方便多了... 常用: 长度:str.length() 尺寸:str.size() 比较:str1.compare(str2) 连接:str1 ...
- Pandas简明教程:三、Pandas文件读写
文章目录 1.CSV文件 2.Excel的读写 3.HTML文件的读写 4.其它文件(数据)类型的简单说明 5.办公自动化问题简析 本系列教程教程完整目录: Pandas支持了非常丰富的文件类型(见文 ...
- python存储文件_Python的文件读写与存储
文件读写与存储 7.2. 读写文件 open()返回一个文件对象,最常见的用法带有两个参数:open(filename, mode). >>> f = open('workfile' ...
- 简学Python第二章__巧学数据结构文件操作
Python第二章__巧学数据结构文件操作 欢迎加入Linux_Python学习群 群号:478616847 目录: 列表 元祖 索引 字典 序列 文件操作 编码与文件方法 本站开始将引入一个新的概 ...
- py pandas 库及 excel 文件读写
文章目录 1. 简介 1.1 df 读数据快速参考 2. DataFrame类 2.0 构造函数 2.1 index 2.2 观察data 2.3 筛选与过滤 2.4 增加/删除 column 2.5 ...
- day1简述、输入输出、运算符、条件语句、文件读写、三元运算
文章目录 1.Python 简述 2.变量 3.输入输出 4.数据运算 5. 条件语句 if..else.elif 循环语句 for.while 6.文件读写 7.三元运算 1.Python 简述 ...
- python 获取窗口句柄_Python文件读写最详细的讲解
本文来自读者投稿,作者:黄同学 今天这篇文章来详细讲解一下Python中的文件读写. 1.文件读写的流程 1)类比windows中手动操作txt文档,说明python中如何操作txt文件? ① win ...
最新文章
- 分享10个原生JavaScript技巧
- xx is not in the sudoers file 问题解决
- [转]Delphi中QuotedStr介绍及使用
- 【WC2018】即时战略
- Psych101(part3)--Day3
- m苹果放n篮子_能用一只手,我绝对不用一双:苹果试图解锁更多Apple Watch控制手势...
- silverlight 学习笔记 (七):Prism的第一个应用
- 第八界中国云计算大会---简单回忆
- C语言函数调用的方式求两个数的大小
- 《Windows游戏编程大师技巧》一、学海无涯
- Windows下的Neo4j下载与安装
- 颜色值RGB转换为HEX(十六进制)
- 80后小学计算机课上的游戏,80后最值得回味的经典课间游戏
- MFC课程设计 --学生成绩管理系统
- 图像处理之3d算法----2d转3d算法介绍
- 通用微PE工具箱下载_通用微PE使用教图文程
- 在 HBuilder X 创建Uni-app项目运行时报错
- ubuntu如何用快捷键截图
- Magic Number魔数是什么
- Cesium基础知识-加载json数据
热门文章
- python开发一个复杂的网站_用Python的SimPy库简化复杂的编程模型的介绍
- python中国剩余定理公式_《孙子算经》之物不知数题:中国剩余定理
- stc15w404as引脚图_怎么把STC15W404AS的EEPROM读写
- mysql数据库表更新_MySQL更新表数据
- AUTOSAR开发工具DaVinci Configurator里的Modules
- 雷柏v500、惠普gk100、微星gk50和达尔优dk100对比哪个好
- Continued Fraction
- 常见的有规律的单复数转换(随笔)
- mysql count的用法_155、MySQL入门(五):SUM and COUNT用法
- linux中跳板机的部署