R语言实战(第二版)-part 1笔记
说明:
1.本笔记对《R语言实战》一书有选择性的进行记录,仅用于个人的查漏补缺
2.将完全掌握的以及无实战需求的知识点略去
3.代码直接在Rsudio中运行学习
R语言实战(第二版)
part 1 入门
----------第1章 R语言介绍--------------------
help.start() #帮助文档首页
demo() #R语言demo演示
demo(package = .packages(all.available = TRUE))
demo(image) #演示图像
example("mean") #函数mean使用示例
library(ggplot2);library(pheatmap)
example("ggplot") #演示R包
example("pheatmap") #par(ask=F)
vignette() #文档
vignette("dplyr")
options() #显示或设置当前选项
options(digits = 2)
help("option") #/help(options)
q() -> y #退出保存.Rhistory和.RData
dir.create("./test") #创建新目录
getwd()
ls() #列出对象
rm(list = ls()) #清空对象
save.image("./test.RData") #保存工作空间
load("./test.RData") #读取工作空间
source("./test.R") #执行脚本
pdf("test.pdf")
png("test.png")
dev.off()
library() #显示库中的包
.libPaths() #库路径
search() #显示哪些包已加载
help(package="ggplot2")
update.packages()
#R CMD BATCH <options> test.R test.Rout #Linux终端批处理
#<R/path/R.exe> CMD BATCH --vanilla --slave "test.R" #window 批处理
help(mtcars) #示例数据帮助
lmfit <- lm(mpg~wt, mtcars)
summary(lmfit)
plot(lmfit)
cook <- cooks.distance(lmfit)
plot(cook)
predict(lmfit,newdata)
----------第2章 创建数据集------------
#行列:observation-variable, record-field, example-attribute
#数值型变量,字符型变量;类别型(因子):有序,名义
#向量、矩阵、数组、数据框、因子、列表
matrix(1:20,nrow = 4,ncol = 5,byrow = F,dimnames = list(c("A","B","C","D"),c("math","eng","chinese","music","art")))
array(1:24,c(2,3,4),dimnames = list(c("A","B"),c("a","b","c"),c("test1","test2","test3","test4"))) #2行3列4维
#数据框选择列
mtcars[1:2]
mtcars[c("mpg","cyl")]
mtcars$mpg
#环境中有同名对象时不适用
attach(mtcars)
plot(mpg,wt)
detach(mtcars)
#赋值仅在with函数中有效
with(mtcars,{
stats <- summary(mpg)
out <<- summary(mpg) #使用特殊赋值符<<-可在括号外使用,写入全局变量,慎用
})
stats
out
#字符型向量因子水平默认以字母顺序创建,可用levels参数指定顺序
factor(c("poor","improved","excellent"),order=T)
factor(c("poor","improved","excellent"),order=T,levels = c("poor","improved","excellent"))
#数值型向量可编码为因子
factor(c(1,2),levels = c(1,2),labels = c("male","female"))
#列表元素
list[[2]]
list[["ages"]]
list$ages
#从键盘输入数据
data <- data.frame(age=numeric(0),gender=numeric(0),weight=numeric(0)) #创建空的数据框
data <- edit(data) #手动输入
data
newdata <- fix(data) #直接修改数据, 原data数据也将改变
newdata
data
newdata2 <- edit(data) #编辑并另存为数据,原data数据不会变
newdata2
data
read.table(colClasses = c("character"),row.names = "geneID",stringsAsFactors = F)
#如读入以0开头的文本时保留0,如股票0010; 如若不以第一行为行名,指定某行; 默认转换字符变量为因子,设为F,可提升读取速度。
xlsx::read.xlsx("./test.xlsx",1) #1表工作表序号
#数据对象函数
length()
dim/str/class/mode
names()
cbind/rbind
head/tail
----------第3章 图形初阶--------------------
dev.new() #画图前新建一个图形窗口
plot(mtcars$mpg,mtcars$cyl)
dev.off() #关闭图形窗口,与pdf等连用
par(no.readonly = T,lty=2,pch=7) #设置图形参数
pch #点符号0-25
cex #符号大小
lty #线条类型1,2,3,4,5,6
lwd #线条宽度
col #默认的绘图颜色
col.axis #坐标轴刻度文字颜色
col.lab #坐标轴名称颜色
col.main #标题颜色
col.sub #副标题颜色
fg #图形前景色
bg #图形背景色
cex.axis #坐标轴刻度文字缩放倍数
cex.lab #坐标轴名称缩放倍数
cex.main #标题缩放倍数
cex.sub #副标题缩放倍数
font #字体样式,1常规,2粗体,3斜体,4粗斜体,5符号字体
font.axis
font.lab
font.main
font.sub
ps #字体磅值
family #字体族,serif衬线,sans无衬线,mono等宽
pin #图形尺寸(宽高),英寸
mai #边界大小,下左上右,英寸
mar #边界大小,下左上右,英分
#表示颜色的方法:
col=1 #颜色下标
col="white" #名称
col="#FFFFFF" #十六进制
col=rgb(1,1,1) #RGB值(基于红绿蓝三色生成)
col=hsv(0,0,1) #HSV值(基于色相-饱和度-亮度生成)
colors() #查看所有颜色
library(RColorBrewer)
n <- 7
mycolors <- brewer.pal(n,"Set1") #Set1调色板中选取n种
barplot(rep(1,n),col = mycolors)
brewer.pal.info #调色板列表
display.brewer.all() #调色板展示
mycolors2 <- rainbow(n) #彩虹色
pie(rep(1,n),labels = mycolors2,col = mycolors2)
mygrays <- gray(0:n/n) #n阶灰度色
pie(rep(1,n),labels = mygrays,col = mygrays)
names(pdfFonts()) #系统中可用字体
abline(v=seq(1,10,2),lty=2,col="blue") #添加参考线
legend() #添加图例
text() #绘图区内部添加文本,通常用于标示图形中的点
mtext() #图形边界之一添加文本
plotmath() #添加数学符号
demo(plotmath)
#图形组合排布
par(mfrow=c(2,2)) #按行
par(mcol=c(1,3)) #按列
layout()
------------------第4章 基本数据管理------------
data <- data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
transform(data,sumx=x1+x2,meanx=(x1+x2)/2)
x%%y #求余
4%%3
x%/%y #取整
5%/%2
is.na() #NA
is.infinite() #Inf,-Inf
is.nan() #NaN
#多数数值函数中含有na.rm=T参数
sum(x,na.rm = T)
na.omit()
Sys.Date()
date()
as.Date("2019-3-5")
as.Date("02/17/2019","%m/%d/%Y")
difftime(Sys.Date(),"2019-3-1",units = "days")
is.numeric()/is.character()/is.vector()/is.matrix()/is.data.frame()/is.factor()/is.logical() #判断,与if-then联合使用
as.numeric()/as.character()/as.vector()/as.matrix()/as.data.frame()/as.factor()/as.logical() #转换
#排序函数
#order 返回排序后的索引
mtcars[order(mtcars$mpg,-mtcars$cyl),]
#sort 直接排序,返回排序后结果
sort(mtcars$mpg,decreasing = T)
#rank 返回排名(相同排名会出现小数)
rank(mtcars$mpg)
#合并函数
merge(df1,df2,by=c("ID","Country"))
cbind(df1,df2,df3) #必须相同行数,以同顺序排序
rbind(df1,df2)
dplyr::left_join(df1,df2,by="ID") #right_join/full_join
mtcars[,c(2:4)] #选列
mtcars[,c(-2,-5)] #剔除列
mtcars$hp <- mtcars$wt <- NULL #剔除两列,NULL未定义(不同于NA)
mtcars[!(names(mtcars) %in% c("hp","wt"))] #是否包含所选列名
mtcars[1:3,] #选行
mtcars[mtcars$mpg>20 & mtcars$vs=="0",]
#取子集
subset(mtcars,mpg>20 | hp<90,select = mpg:hp) #选行又选列
#随机抽样
mtcars[sample(1:nrow(mtcars),3,replace=F),]
--------------第5章:高级数据管理--------------
#1.数学函数
abs(-1)
sqrt(25)
ceiling(3.2) #不小于某值的最小整数
floor(3.2) #不大于某值的最大整数
trunc(3.2) #截取整数
round(3.456,digits = 2) #保留2位小数(四舍五入)
signif(3.456,digits=2) #保留2位有效数字(四舍五入)
cos(x)/sin(x)/tan(x)
acos(x)/asin(x)/atan(x)
log(4,base = 2)
log(10) #取自然对数,而非ln(4)
log10(10) #常用对数
exp(2) #指数,即e^2
#总结R语言中取整运算主要包括以下五种:floor()向下取整,ceiling()向上取整,round()四舍五入取整,turnc()向0取整,signif()保留给定位数的精度
#以上函数可直接用在数值向量、矩阵或数据框中
#2.统计函数
x <- c(1,1.2,4,3,6,9,3,23,0.001,10)
mean(x)
mean(x,trim = 0.05,na.rm = T) #去掉最大和最小的5%数据以及缺失值后的均值
median(x)
sd(x) #标准差
var(x)
mad(x) #绝对中位差:统计离差,是一种鲁棒统计量,MAD=median(∣Xi-median(X)∣)
quantile(x) #求分位数
quantile(x,1/4) #25%分位数
quantile(x,0.9) #90%分位数
range(x) #值范围
sum(x)
diff(x) #滞后差分,默认滞后1位,即后一位数减前一位数
diff(x,lag = 2)
min(x)
max(x)
scale(x) #按列进行中心化或标准化
scale(x,center = T,scale = T) #默认。center中心化,center和scale标准化
scale(dataframe) #同样对矩阵或数据框的列进行均值为0,标准差位1的标准化,相当于Z score
scale(dataframe)*sd+m #进行任意均值m和标准差sd的归一化
transform(dataframe,var=scale(var)) #仅对矩阵/数据框的指定列进行归一化
#3.概率函数
#d=密度函数density
#p=分布函数
#q=分位数函数quantile
#r=随机数生成函数random
#eg:正态分布norm
dnorm(x)
pnorm(1.96) #曲线下方面积
qnorm(0.9,mean = 100,sd=200) #0.9分位点值
rnorm(50,mean = 50,sd=10) #生成50个正态随机数
a <- pretty(c(-5,5),30) #pretty(x, n)创建美观的分割点,将一个连续型变量x分割为n个区间,绘图中常用。
b <- dnorm(a)
plot(a,b,type = "l")
#其他概率分布:
beta/binom/chisq/exp/f/gamma/geom/hyper/logis/multinom/nbinom/pois/signrank/t/unif/weibull/wilcox.......
runif(5) #生成(0,1]上服从均匀分布的伪随机数
runif(5) #随机数每次都不同
set.seed(123) #设定种子,使下次结果重现。数字可随意设定,复现时指定相同即可。
runif(5)
set.seed(123)
runif(5) #复现结果,需与set.seed连用
#4.字符处理函数
x <- "adb234FGdef"
nchar(x) #字符长度,length(x)是元素的个数
length(x)
substr(x,2,4) #提取子串
grep("FG",x) #返回匹配下标
sub("FG","yx",x)
sub("\\s",".","hello world") #R语言转义\\
sub("\\.","_","hello.world") #"."需要中括起来或加转义\\,不然默认为一个字符
grepl()
gsub()
strsplit(x,"")
unlist(strsplit(x,"234"))[2]
sapply(strsplit(x,"234"), "[",2) # "["表提取某个对象一部分,即提取第2个元素
paste(x,1:3,sep = "_")
paste0(x,1:3)
toupper(x) #大写转换
tolower(x) #小写转换
#其他函数
seq(1,10,2)
rep(1:7,3)
cut(c(1:20),breaks=4) #将连续变量切割n个区间(水平因子)
table(cut(c(1:20),breaks=4,labels = c("a","b","c","d")))
pretty(c(1:20),4) #创建美观分割点(n个),常用绘图
apply(mtcars, 2, sum)
mydata <- matrix(rnorm(30),nrow = 6)
apply(mydata, 1, mean)
apply(mydata, 2, mean, trim=0.2) #可直接加函数参数
fix(mydata) #加个NA试试
apply(mydata, 2, mean, na.rm=T)
lapply() #返回列表
sapply() #返回向量
#按条件创建新变量
mtcars$new[mtcars$mpg >20 & mtcars$vs=="0"] <- "yes"
mtcars$new[mtcars$mpg <=20 & mtcars$vs=="1"] <- "no"
head(mtcars)
#控制流
#基本概念:语句{statement},条件cond(T or F),表达式expr,序列seq
#1.循环
for(i in 1:10) print("hello")
i=10;while (i>0) {print("hello");i=i-1} #确保while中条件可变
#2.条件
#if-else结构
grade <- "10"
if(!is.factor(grade)) grade <- as.factor(grade) else print("grade already is factor")
#ifelse结构(紧凑)
ifelse(as.numeric(grade)>9,"passed","failed")
#switch结构 (选择)
for (i in c("sad","happy"))
print(
switch(i,
happy="yes",
sad="no",
angry="nono"
)
)
#3.自编函数
#描述统计量计算函数
mystats <- function(x,parametric=T,print=F){
if(parametric){
center <- mean(x);spread <- sd(x) #参数统计量
}else{
center <- median(x);spread <- mad(x) #非参统计量
}
if(print & parametric){
cat("mean=",center,"\n","sd=",spread,"\n")
}else if(print & !parametric){
cat("median=",center,"\n","mad=",spread,"\n")
}
result <- list(center=center,spread=spread)
return(result)
}
##验证以上函数
set.seed(123)
x <- rnorm(100)
mystats(x)
mystats(x,parametric = F)
mystats(x,parametric = F,print = T)
mystats(x,parametric = T,print = T)
#switch自编函数
mydate <- function(type="long"){
switch(type,
long=format(Sys.time(),"%A %B %d %Y"),
short=format(Sys.time(), "%m-%d-%y"),
cat(type, "is note a recognized type\n")
#cat捕获用户输入错误,也可用warning(提示错误),message(诊断信息),stop(停止执行)等函数
)
}
##验证以上函数
mydate()
mydate("long") #默认
mydate("short")
mydate("x")
#整合(aggregate)和重塑(reshape)
t(mtcars)
head(mtcars)
aggregate(mtcars, by=list(mtcars$cyl,mtcars$gear), FUN = mean, na.rm=T)
library(reshape2)
md <- melt(mtcars,id=c("mpg","cyl")) #融合,宽数据变长数据
#提取id列,其他列全部融合
md2 <- dcast(md,mpg+cyl~variable) #重塑,长数据变宽数据
head(md2)
dcast(md,mpg+variable~cyl)
dcast(md,cyl+variable~mpg)
#使用mpg对cyl和variable分组
#公式的左边每个变量都会作为结果中的一列,而右边的变量被当成因子类型,每个水平都会在结果中产生一列。
dcast(md,mpg~variable,mean)
dcast(md,cyl~variable,mean)
dcast(md,mpg~cyl,mean)
#dcast-输出时返回一个数据框。acast-输出时返回一个向量/矩阵/数组
R语言实战(第二版)-part 1笔记的更多相关文章
- R 语言实战-Part 4 笔记
R 语言实战(第二版) part 4 高级方法 -------------第13章 广义线性模型------------------ #前面分析了线性模型中的回归和方差分析,前提都是假设因变量服从正态 ...
- R 语言实战-Part 3 笔记
R 语言实战(第二版) part 3 中级方法 -------------第8章 回归------------------ #概念:用一个或多个自变量(预测变量)来预测因变量(响应变量)的方法 #最常 ...
- R语言实战-Part 2笔记
R 语言实战(第二版) part 2 基本方法 -------------第6章 基本图形------------------ #1.条形图 #一般是类别型(离散)变量 library(vcd) he ...
- R 语言实战-Part 5-1笔记
R 语言实战(第二版) part 5-1 技能拓展 ----------第19章 使用ggplot2进行高级绘图------------------------- #R的四种图形系统: #①base: ...
- R 语言实战-Part 5-2笔记
R 语言实战(第二版) part 5-2 技能拓展 ----------第21章创建包-------------------------- #包是一套函数.文档和数据的合集,以一种标准的格式保存 #1 ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- 《R语言实战》读书笔记--为什么要学
本人最近在某咨询公司实习,涉及到了一些数据分析的工作,用的是R语言来处理数据.但是在应用的过程中,发现用R很不熟练,所以再打算学一遍R.曾经花一个月的时间看过一遍<R语言编程艺术>,还用R ...
- R语言实战(第2版)PDF完整版带书签目录
<R语言实战2>PDF+源代码 下载:https://pan.baidu.com/s/1gP_16Xq9eVmLJ1yOsWD9FA 提取码:l8dx 分享更多python数据分析相关电子 ...
随机推荐
- 第五课第四周笔记4:Transformer Network变压器网络
Transformer Network变压器网络 你已经了解了 self attention,你已经了解了 multi headed attention.在这个视频中,让我们把它们放在一起来构建一个变 ...
- LiveVideoStackCon2021 北京站专访:从上云到创新,视频云的新技术、新场景
伴随着视频技术的进步和标准的迭代,视频产业从模拟进入到数字时代,完成了从电影电视到互联网的媒介转换,并且衍生出了超高清.3D.AR/VR 等多种创新形态.特别是在后疫情的当下,我们可以看到音视频技术领 ...
- xshell几款绝佳配色方案
NO.1 [mycolor] text(bold)=e9e9e9 magenta(bold)=ff00ff text=00ff80 white(bold)=fdf6e3 green=80ff00 re ...
- java中延时队列的使用
最近遇到这么一个需求,程序中有一个功能需要发送短信,当满足某些条件后,如果上一步的短信还没有发送出去,那么应该取消这个短信的发送.在翻阅java的api后,发现java中有一个延时队列可以解决这个问题 ...
- boost编译中的细节问题
原文链接 http://www.cppblog.com/Robertxiao/archive/2013/01/06/197022.html 生成文件命名规则:boost中有许多库,有的库需要编译.而有 ...
- DDD领域驱动设计-项目包结构说明-Ⅳ
基于DDD领域驱动设计的思想,在开发具体系统时,需要先建立不同的层级包.主要是梳理不同层面(应用层,领域层,基础设施层,展示层)包括的功能目录,每一个层面应该包括哪些模块.本例所讲述的分层是DDD落 ...
- hdu 1861 游船出租(模拟题,,水)
题意: 现有公园游船租赁处请你编写一个租船管理系统. 当游客租船时,管理员输入船号并按下S键,系统开始计时:当游客还船时,管理员输入船号并按下E键,系统结束计时. 船号为不超过100的正整数.当管理员 ...
- 精心整理Java微服务最全面试题集(含答案)
微服务架构相关 大型网站架构演变过程 网站架构演变演变过程 传统架构 → 分布式架构 → SOA架构 → 微服务架构 什么是分布式架构 分布式架构就是将传统结构按照模块进行拆分,不同的人负责不同的模块 ...
- 关于dns服务工作的原理,和配置的细节理解。
dns服务器相关 1,dns原理,也就是迭代,和递归查询.将域名解析为ip的过程. 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Loc ...
- Linux初学者:从不同角度理解Linux系统
在我初学Linux系统时,虽然已经掌握了一些命令,但总觉得还是很混乱.大家新买的笔记本如果是Windows系统,那么第一件事往往就是分区,目的就是将系统和软件分开.然而Linux却没有类似于Windo ...