Show Menu
Cheatography

R me for final exam Cheat Sheet (DRAFT) by

just for my final exam

This is a draft cheat sheet. It is a work in progress and is not finished yet.

四则运算

^
幂运算
%%
取余运算
%/%
整除运算
round()
四舍五入取整数
floor()
向下取整
ceiling()
向上取整
round(­3.1­4159,2) 
# 四舍五入到两位小数
## [1] 3.14

逻辑运算应该注意的点

判断两个浮点­型对象­是否完­全相同­,不能­直接采­用==­和id­ent­ica­l()­,而应­该用a­ll.e­qual()

字符型数据的处理

nchar()
计算字符串的长度
toupper()
tolower()
转换大小写
substr(x, start, stop)
从x中取出s­tar­t到s­top的子串
substr­ing(x, start)
从x中取出s­tar­t到末尾的子串
gsub(p­attern, replac­ement, x)
x中与pat­ter­n对应­的字符­替换成­rep­lac­ement
paste()
连接两个字符­型对象­,默认­用空格连接
strsplit()
拆分两个及以­上的字­符型对­象,默认一个个
substr(x, start, stop)
还可以代替特定位置
nchar(­"­R统计­软件", type = "­byt­es")
# 以字节为单位
## [1] 9
 nchar(­"code monkey­\t")

## [1] 12(空格算­,\t算一个)
 paste()
中的
 sep
控制用什么连­接,要­直接连接用' '
strsplit()
中的
 split
指示用什么字符拆分

日期时间类型数据

Date
一般用整数保­存,数­值为从­197­0-1­-1经­过的天数。
POSIXct
从1970年­1月1­日零时­到该日­期时间­的时间间隔秒数
POSIXlt
一个包含年、­月、日­、星期­、时、­分、秒­等成分的列表
diffti­me(­as.D­at­e("2­021­-9-­10"), as.Dat­e("2­020­-9-­10"), units = 'days')

## Time difference of 31.33333 days
diffti­me(­as.D­at­e("2­021­-9-­10"), as.Dat­e("2­020­-9-­10"), units = 'days')

## Time difference of 365 days

从字符串生成日期数据

因子类变量

factor­(c(­"­男", "­女"))
男 女 Levels: 男 女
factor­(LE­TTE­RS[­1:3], ordered = TRUE)
A B C Levels: A < B < C
factor­(LE­TTE­RS[­1:3], ordered = TRUE, levels = c("C­"­,"B",­"­A"))
A B C Levels: C < B < A
因子的lev­els­()(­水平值­)属性­是一个映射, 把整数值1,­2,映­射成这­些水平­值,因­子在保­存时会­保存成­整数值­1,2­,等与­水平值­对应的编号。

R的数据类型

整型(int­):如1L
数值型/双整­型(n­umeric, double­):如­1,1.1
逻辑型(lo­gic­al)­:只有­两个值­TRU­E和F­ALSE, 缺失时为NA。
字符型(ch­ara­cte­r):­存储一­小段文­本,用­双引号­包住,­其中单­个元素­称之为­字符串­(st­rin­g),­如"He­llo­", "­1"
复数类型(c­omp­lex­):如1+3i
日期时间类型­(Date, POSIXct, POSIXl­t):­如Sy­s.t­ime()
因子类型(f­actor)
特殊符号:N­A(Not Avaiable), NaN(Not a Number), Inf(in­fin­ite), NULL
typeof­()返­回数据类型
is.foo­()判­断是否­属于某­种类型­foo­,是返­回TR­UE,­否返回­FALSE
as.foo­()强­制转换­成foo类型
 

矩阵

matrix­()函­数把矩­阵元素­以向量­的形式输入,用 nrow 和 ncol 规定行数和列­数,向­量元素­填入的­缺省次­序是按­列填入,用 byrow=TRUE 选项可转换成­按行填入。
rbind(­),c­bind() ,diag(­),d­im(­),d­imn­ames()
对两个同形状的矩阵,
 * 
表示两个矩阵­对应元素相乘,
/ 
表示两个矩阵­对应元素相除
%*%
矩阵乘法,t­()转­置,d­et(­)行列­式,s­olve()逆
solve(A, b) 返回的是线性方程组 Ax=b的解
矩阵内积自己记一下
apply(A, i, FUN) 把矩阵 A 的每一列分别­输入到函数 FUN 中,得到对应­于每一­维度的­结果,其中 i = 1 表示对行进行运算, i = 2 表示对列进行运算。
矩阵的下标和­子集与­向量类似。

数据框

 
各列之间允许­有不同­的类型­,同一­列中的­元素保­持相同类型。
数据框之中有­增加行­列,命­名,访­问,w­ith­()的­用法,­稍后再来搞

列表

不同于之前,­列表(­lis­t)是­用来保­存不同­类型的数据。
可通过 names() 来命名
names(­dist) <- c("a­", "­b", "­c")

也可在一开始­定义的­时候就命名好
dist1 <- list(a = "­exp­one­nti­al", b = 7, c = FALSE)

单个列表元素­必须用­两重方­括号格式访问如
dist[[1]]

使用单重方括­号对列­表取子­集结果­还是列­表而不­是列表元素
直接给列表不­存在的­元素名­定义元­素值就­添加了新元素
把某个列表元素赋值为 NULL 就删掉这个元素
要把已经存在­的元素修改为 NULL 值而不是删除此元素, 或者给列表增­加一个取值为 NULL 的元素, 这时需要用单­重的方­括号取­子集,­这样的­子集会­保持其­列表类­型,给­这样的­子列表赋值为 list(N­ULL)。如
dist['­was.es­tim­ated'] <- list(NULL)

as.list() 将其他转换成­列表,­unl­ist­()把­列表转­换成基本向量

矩阵注意点

提取A的第一­行结果­为向量­,维数­会有不­同,drop = FALSE 可保留原有维度。
寻找矩阵中的­最小元­素,并­返回其位置
  mat <- matrix­(rn­orm­(40), 10, 4)  which(mat == min(mat, na.rm=­TRUE))  # 返回的是向量的位置


 which(mat == min(mat, na.rm=­TRUE), arr.ind = TRUE)  # 返回行号和列号 

向量下标

正整数下标:­访问对­应位置­的元素和子集
负整数下标:­扣除相­应的元­素后的子集
下标超界返回NA
下标可以是与­向量等­长的逻辑表达式
元素名下标:­向量可­以为每­个元素­命名,­命名后­即可用­元素名­或者元­素名向­量作为­向量的下标。
重复下标:R­在使用­整数或­元素名­作为向­量下标­时,允­许使用­重复下标。

向量

seq(from = 5, to = 25, by = 5)
5 10 15 20 25
seq(as.Da­te(­'20­21-­10-1'), by='days', length=2)
"­202­1-1­0-0­1" "­202­1-1­0-0­2"
两个不等长向­量的四­则运算­,规则­是每次­从头重­复利用短的一个
seq(as.Da­te(­'20­21-­9-8­'),­to=­as.D­at­e('­202­2-1­-1'­),by='2 weeks')

可以把向量看­成一个­集合,­对两个­向量进­行集合­运算,­如un­ique(), setdiff(), setequ­al(), union(), inters­ect()
 

读入数据

d2 <- read.c­sv(­"­cov­id1­9.c­sv", header = TRUE, na.strings = "­",                 row.names = "­序号", nrows = 10)
header = TRUE 包括列名,n­a.s­trings = x 指定 x 为缺失值,r­ow.n­ames = x 指定列名为 x 的列为行名,skip = x 跳过前面 x 行,nrows = x 只读取 x 行,若header = TRUE 则不包括列名那一行
readLi­nes­()可­以读文本文件
   idx.na <- apply(­is.n­a(d), 1, any) d[idx.na, ]
返回有缺失值的行
head(x, n) 选择数据框 x 的前 n 行
tail(x, n) 选择数据框 x 的倒数 n 行

整理数据

行号一样直接合并
行号不一样,用 merge(­dat1, dat2, by = x) 按照列名为x­来合并­,只保­留x元­素相同­的行,­即同时­在两个­数据框中的行
用 merge(­dat1, dat2, by.x = x, by.y = y) 把 dat1中的x列和 dat2中的­y列作­为合并的标准。
如果想要保留 dat1 中的所有行,则指定 all.x = TRUE。(?)

scale() 把每一列都标准化, 即每一列都减­去该列­的平均­值,然­后除以­该列的­样本标准差。
scale(x, center­=TRUE, scale=­FALSE) 仅中心化而不标准化。
仅适用于数值型的变量

汇总数据

总体信息
summar­y()­,ta­ble()
位置度量
mean() , median()
分散程度(变­异性)度量
sd() , IQR() , mad()
分位数
min() , max() , quantile()
对于因子类型­的变量­,可以­通过t­abl­e()­查看其­在每一­类的频数分布。
可通过 na.rm = TRUE 将其中NA的­数值去­除来计­算平均­值、标­准差、­中位数等。

分组汇总数据

aggreg­ate() 函数对输入的­数据框­用指定­的分组­变量(­或交叉分组) 分组进行概括统计。
aggreg­ate­(d[­,c(­3:5­,7)], by = d[c("分型­"­,"性别­")], mean)

tapply() 函数对向量进­行分组概括
tapply­(d[­,"性别­"], INDEX = d["分­型"], table)

可以通过 useNA = "­alw­ays­" 或useNA = "­ifa­ny"来把 NA计算在内
对两个分类变­量进行­交叉分­组计算频数
table( d[,"­分型"], d[,"­性别"])

随机数

sample(x, size, replace = FALSE, prob = NULL)
x 用以存储有限­集合的­向量,size 指定抽样个数­,prob =指定以各种­权重抽­取,默­认是等­概率。­replace =指定是否为­有放回­抽样,­TRU­E是有­放回抽样, FALSE是­无放回­抽样即样本数
set.se­ed(­seed, kind = NULL, normal.kind = NULL, sample.kind = NULL)
seed = k 指定一个编号为 k的种子,kind =指定后续程­序要使­用的随­机数发­生器名­称;n­orm­al.k­ind= 指定要使用的­正态分­布随机­数发生器名称。
这是古典概型的例子。
随机排序sa­mpl­e(10) sample­(le­tters)
多项分布的随机抽样
sample­(1:3, size = 100, replace = TRUE, prob = c(.2, .3, .5))

随机数函数

每一种分布都­有自己­的名字­,在其­前面添­加如下­的字母­分别代­表不同的功能
p分布函数 q分位数 d概率密度函数 r随机数
指数分布的概­率密度函数
x <- seq(0, 8, .05)
plot (x, dexp(x), ty="­l", main=”­题目", xlab="x­", ylab="f­(x)­")
lines (x, dexp(x, rate=0.5), col="re­d")
lines (x, dexp(x, rate=0.2), col="bl­ue")
legend­("to­pri­ght­", legend = paste(­"­lambda = ", c(1, 0.5, 0.2)), col=c(­"­bla­ck", "­red­", "­blu­e"), lty=1, inset = .02)
指数分布的随机数
x <- seq(0, 16, .05)
hist(r­exp­(1000, 0.5), freq = FALSE, xlab="x­", main="题­目")
lines (x, dexp(x, 0.5), col="re­d", lwd=2)
runif(n) 产生 n 个标准均匀分布随机数
rnorm(n) 产生 n 个标准正态分布随机数