课上脚本 Flashcards
用pie作饼图
pie(rep(1,12),col=rainbow(12))
rainbow(12)是一种颜色
pie的第一项是一个向量 the values in x are displayed as the areas of pie slices
命名函数(给向量命名)
names(x)
绝对路径读取文件
scan(“D:/data.txt, what=””)
只存两个变量
save(a,b,file=“”)
存全部变量
save.image()
数据类型 mode typeof
mode:numeric character logical complex
typeof:double integer character logical complex
因子
分类变量的正数表示 每个分类称之为“水平”
把文字转换成因子
factor()
等差数列只希望有10个数
seq(from=, to= , length.out= 10)
sample取样函数怎么用
sample(取样范围;去多少个;replace=T,prob=c(0.3,0.7))
table是干嘛的 怎么用
table(x)
x是上面取样好的结果
table会告诉你 每一个结果各取了多少样(分类统计)
均匀分布
runif(1000,min=,max=)
1000为取出的数的量 也是横轴
min max控制着纵轴
画图的时候直接plot(x)即可
正态分布
rnorm(1000,sd=,mean=)
不写的话默认均值和方差为0
pmin
pmin(score,100)
意思是把score中大于100的数换成100
向量内积
%*%
阶乘
factorial
floor ceiling trunc round
floor 求一个比这个数更小的整数
ceiling 求一个比这个数更大的整数(向上取整)
trunc 把小数部分截去
round 四舍五入
sqrt(-16)
NaN
0/0
NaN
-5/0
-Inf
all(x%%2==0)any which
all 判断集合里是否都为偶数
any 判断集合中是否存在偶数
which 集合中哪个为偶数(第几个)
如何排序
sort(x)这是从小到大排
sort(x,decreasing=T)就是从大到小排
求平均数
mean()
求中位数
median()
如果为偶数中位数就是中间两个的平均数
所以数求乘积
prod()
方差
var()
标准差
sd()
summary是干嘛的
把下四分之一点 中值 上四分之一 max都求出来
比fivenum可以多求出一个数字 均值
fivenum(x)
minimum lower-hinge median upper-hinge maximum
上四分之一的意思
pmin(x,y)
pmax
逐项比较 取每一次比较中较小的值
筛选集合s中的一部分
1⃣️s[s>90] 2⃣️subset(s, s>90) 正常情况下是一样的 区别: 当集合里有NA的时候,[ ]替换符号无论如何也会把NA保留 而subset可以把NA给去掉
判断哪些是NA
哪些不是NA
is.na(y)
!is.na(y)
矩阵
matrix(矩阵中的所有数,nrow= ,ncol= ,dimnames=list(c(),c())
这里默认是按列安放数字 如果想要按行安放 就要加上 byrow=T
dimnames只能传递一个列表
或者也可以用置换函数rownames(x)
看这个是数字 向量 矩阵 还是数组
class(x)
会出现integer or vector or matrix or array
求维数
dim(x)
数字维数为NULL
筛选矩阵的时候如果只筛选一行 就会自动降维 class变成integer了 那怎么不降?
加一个drop=F
在原有矩阵中多加几行
然后每行起新的行名
原有矩阵:fruit
方法一:
rbind(fruit,Melon=c(,,,))
方法二:多行
f
原有矩阵中加列
cbind 用法见rbind
矩阵乘法
- 指的是两个矩阵对应元素相乘
%*% 指的是数学上的 两个矩阵相乘
提取矩阵M对角线元素
diag(M)
得到对角线上为3 5 7 其他地方为0的矩阵
diag(c(3,5,7))
diag(6) 得到啥
6*6 矩阵 对角线是1 其他位置是0
矩阵A求逆
solve(A)
求解线性方程组
构造系数矩阵A:
A
3*4的矩阵m dim(m)结果
3 4
矩阵m
每行数据(每列数据)求和(求均值)
rowSums(m)
colSums(m)
rowMeans(m)
colMeans(m)
构造数组
array(所有数据,dim=c( , ,))
x是一个向量
cumsum(x)
cumprod
cummax
运行结果得到五个数
分别是第一个数求和 前两个数求和 前三个数求和…
求导
D(expression(关于x的表达式),“x”)后面那项是对x求导的意思
如果前面那项是关于x y的表达式 也可以求偏导
expression后面的那个是一个表达式
查看导数的值
eval( D(e1,”x”))
e1是表达式
构造列表
a
所以你列表中某个组件
双层方括号索引 s[[1]]
若要选去某个组件的其中一部分 之后在[[1]]的基础上再加别的正常的[ ]即可
定义列表时给出组件的名称
a
列表中单层方括号索引的作用
求子列表
双层方括号可以选去多个组件吗?
no
paste0
无脑粘贴
paste0(“A”,1:5)
为 A1 A2 A3 A4 A5
列表增加组件
方法1:
s$ Weight
删除列表中的组件
s$Weight
unname(s)
产生一个新的没有名字的对象 原来对象名字没变
直接去掉原有列表中每个组件的名字
names(s)
unlist(x)
把列表中的每一个组件的每一个元素弄出来
变成了一堆单个的元素
class() character
将x y两个列表连接起来
c(x,y)
如果加一个recursive=T 那就又变成一堆元素了
列表与数据框 概念
列表是一维的 有一堆组件
数据框相当于是一个二维列表
读取数据框
read.csv(”D:\…”,stringsAsFactors=F)
若不想转化成因子 只读字符串 就用后面这个
查看数据框内部结构
str(s)
他会告诉你有几个变量 几个观测
每一列都是啥
变量是指列数 观测指行数
也可以看到每个变量的数据类型 是因子 字符串 整数还是啥
数据框索引
数据框可以以矩阵的形式进行索引
s[5:8,2:3]
Or
s$ Major
获取数据框行数列数
nrow(s)
ncol(s)
查看前六行
查看前10行
查看后10行
head(s)
head(s,n=10)
tail(…)
创建数据框
data.frame( ,,)
每一个元素长度必须一样
每一个元素是指每一列的元素 按列排放
查看数据框列的名字
给列起名字
names(d)
起名字就用置换函数直接命名
让数据框中的某一列由因子变成字符串
s$Name
把数据框的一列由字符串转化成因子
s$Major
直接读取一个文件 变量是因子还是字符串形式?
因子
length(p)
p的列数
因为把每一列认为是一个变量
数据框删除列
和列表操作一样
是p$Math
read. csv
read. table
read. delim
read. csv(“D:/person.csv, stringsAsFactors=F)
read. table(“D:/person.txt,header=T, sep=“\t”)
read. delim(“person.txt) 它默认有标题行 并且默认分隔符就是制表符
对矩阵m用apply函数
apply(m,1,sum)
1代表对m的行用后面的函数
sum是一个函数 也可以变成一个自定义函数
对数组用apply函数
如果想对每一层的每一行求和
apply(a,c(3,1),sum)
3代表先进入每一层
1代表对每一行求和
tapply
分组统计
tapply(height,fsex,mean)
统计的是身高的均值 按照性别统计
第二项最好是因子
tapply(name,fsex,length)
统计的是名字的个数 按性别统计
length是统计个数的
基于两个因子分组:
tapply(s$Grades, list(s$Major, s$Sex),mean)
第二项必须是列表形式
lapply
对列表进行统计
d
sapply
lapply的改进版 也是在列表的每一个组件上应用函数
sapply(d,sum)
不同的是它得到的结果是一个向量
vapply
和sapply很像 也是对列表应用函数 得到的结果也是一个向量 但 vapply(d,sum,FUN.VALUE=3+4i) 后面要给出一个向量元素形式 这样最后得到的向量就是比如 c(400+0i,150+0i,…)这种形式的
rapply
循环统计 如列表有一个组件还是一个列表的话lapply就没法用了 这时我们用rapply 可以进入列表中的列表
split
分类并重组
split(s$Grades, s$Major)
就是根据专业来分组 显示出的是成绩
最后得到的结果是一个列表
by
使用一个or多个因子将数据框进行分组 分组之后再应用函数 by每次传递过来的都是一个数据框
by(s ,s$Major, print)
基于专业进行分组
s指原数据框 print那里可以换成别的函数
class(by(s,…))
是by
aggregate
aggregate(s[,5:7], list(s$Major), function(x)…)
也是根据因子 对部分数据框进行分组 应用函数
内部调用apply函数
x
很有意思 可以在控制台输不同数字的
可以输入多个数 就得到一个向量
但这个只能读数值型的 就是说只能输入一些数字
如果想连续输入字符怎么办?
kids
切割
strsplit(str, split=“ ,| ;| +|\t”)
|或者
+一个或者多个
表示根据这些标点符号来切割
plot绘图
plot( x=101:110, y=31:40, xlab=“ “, ylab= “ “, main=“ 主标题”, sub=“副标题”)
注意左下角交汇点并不是原点
在已有图形上添加标题(若之前🈚️标题)
title(main=“ 主标题”,“副标题”)
在已有图形上添加点
points(x=c(101,103), y=c(36,38), col=“red”, pch=16)
pch是point character
在已有图形上添加线
由点连成线 所以先给出一些点
x
在已有图形上添加注释
text( x=c(35.5, 37.5), y=c(13.5,15.5), labels=c(“”, “”) ,col=c(“coral”, “navy”))
给出添加注释的点的坐标(可用locator)
然后是注释内容labels
给出坐标轴范围
可以通过一个点来给
plot(x=105, y=205, xlim =c(100,110), ylim=c(200,220))
前面那个点如果不想让他出现 搞成负的也行