嘤
不想记笔记qaq
但是书只有纸质版的。
为了学shiny框架做毕设qaq
GITHUB地址:
SHINY官方教程:
shiny.rstudio-tutorial-lesson1
书的数据下载:
画图不显示:控制台运行 dev.off() / dev.new()
第1章 R语言入门
1.2 创建R数据
- <- :赋值
- c() :创建向量
- matrix(a):用向量a创建矩阵,nrow=?,ncol=?,byrow=TRUE
- 将无序因子转化为数值:as.numeric(factor(a))
- 矩阵和数据框的转换:as.matrix(frame)/as.data.frame(matrix)
1.3 数据的其他操作
1.3.1 数据的读取和保存
#读取数据
table <- read.csv("/") #含有标题的
table <- read.csv("/", header=False) #不含有标题的
load("/") #R数据
#保存数据
write.csv(table, file="/") #保存至csv
save(table, file="/") #以R格式保存数据
1.3.2 数据类型的转换
- 变量转化为向量
vector <- as.vector()
- 数据框<->矩阵
as.matrix(frame)
as.data.frame(matrix)
- 短格式转换为长格式:其中的id.vars称为标识变量,用于指定按哪些因子汇集其他变量。
library(reshape2)
table <- melt(table, id.vars, variable.name...)
1.3.3 生成随机数
rnorm(n, mean=0, sd=1)
1.3.4 数据抽样
sample(x, size, replace = FALSE, prob = NULL)
1.4 生成频数分布表
R中生成列联表的函数有base包中的table函数(一、二维),stats包中的ftable函数(多维),vcd包中的structable函数(多维)。
1.4.1 类别数据频率分布表
- 一维频数分布表—> 百分比表
mytable <- table(data1_1$满意度)
prob.table(mytable)*100
- 二维列联表
mytable <- table(table1$性别, table1$满意度)
addmargins(mytable) #添加边际和
- 多维列联表:row和col的数量随意
mytable <- ftable(data1, row.vars = c("", ""), col.vars = "")
- 高维扁平化表:formula是一个表达式,用于指定行变量和列变量;direction是指定拆分方向(‘h’, 'v');
structable(formula, data, direction)
1.4.2 数值数据类别化
- 类别化:Sturges:K=1+log10(n)/log10(2);
nclass.Sturges(data1$销售额)
- 使用cut函数生成频数分布表
d <- table(cut(v, breaks=30*(17, 24), right = FALSE, dig.lab = 4))
- 使用actuar包中的grouped.data函数实现对数据的分组
grouped.data(v, breakers = 5, right = FALSE)
#breakers = c(500, 550, 600, 650, 700, 750)
1.5 编写R函数
layout(matrix(c(1,2,3,3),2,2,byrow=TRUE))
mai:以数值向量表示边界大小,顺序为"下、左、上、右",单位为英寸
functionname <- function(a1, a2, ...) {
}
第2章 R绘图基础
2.1 R的基本绘图函数
2.1.1 高级绘图函数
1 高级绘图函数
- plot根据不同的数据类型所绘制不同的图形
函数 | 数据类型 | 图形 |
plot() | 数值 | 散点图 |
plot() | 因子 | 条形图 |
plot() | 一维列联表 | 条形图 |
plot() | 数值,数值 | 散点图 |
plot() | 因子,因子 | 脊形图 |
plot() | 二维列联表 | 马赛克图 |
plot() | 数值,因子 | 箱线图 |
plot() | 因子,数值 | 带状图 |
plot() | 数据框 | 散点图矩阵 |
- 拟合线性模型
par(mfrow = c(2, 2), mai = c(0.6, 0.6, 0.2, 0.1), cex = 0.6)
model <- lm(R~Python, data = data2_1)
plot(model)
- plot函数及其参数:查help
2 其他高级绘图函数
graphics包中其他一些高级绘图函数
2.1.2 低级绘图函数
chull(x, y = NULL):计算位于指定点集凸包上的点的子集(即数据点集合中最外围,轮廓点集合)
#par(mai = c(0.7, 0.7, 0.4, 0.4), cex=0.8)
set.seed(1)
x <- rnorm(200)
y <- 1+2*x+rnorm(200)
d <- data.frame(x, y)
plot(x, y, xlab="x=自变量", ylab="y=因变量")
grid(col="grey60")
axis(side=4, col.ticks = "blue", lty=1)
polygon(d[chull(d), ], lty=6, lwd=1)
points(mean(x), meand(y), pch=19, cex=5, col=2)
abline(v=mean(x), h=mean(y), lty=2, col="gray30")
abline(lm(y~x), lwd=2, lty=6)
lines(lowess(y~x, f=1/6), col=4, lwd=2, lty=6)#拟合曲线
segments(-0.8, 0, -1.6, 3.3, lty=6, col="blue")#左示意曲线
arrows(0.45, -2.2, -0.8, -0.6, code = 2, angle = 25, length = 0.06, col=2)#带箭头的线段头
text(-2.2, 3.5, labels=expression("拟合的曲线"), adj=c(-0.1, 0.02), col=4)
rect(0.4, -1.6, 1.6, -3.5, col="pink")
mtext(expression(hat(y)==hat(beta)[0]+hat(beta)[1]*x), cex=1.2, side=1, line=-5.6, adj=0.72)
legend("topleft", legend=c("拟合的曲线", "拟合的曲线"), lty=c(1, 6), col=c(2, 4), cex=0.8, fill=c("red", "blue"), ncol=1, inset=0.02)
title("散点图以及拟合直线和曲线", cex.main=0.8, font.main=4)
box(col=4, lwd=2)
2.2 图形参数与图形控制
2.2.1 绘图参数
- title("");设置标题 或 main="" 设置图标标题
- horiz=TRUE;水平放置
- density = 40;填充密度
- xlab="", ylab="";x,y轴标签
- col=c("lightgreen", "skyblue");varwidth = FALSE;箱线图颜色设置
2.2.2 图形设置
使用par设置图的排列方式,图形的边界大小,图中字体或符号的大小,主标题字体的大小等;如果希望所有的图形都使用相同的参数,可将参数放在par函数中统一设置,如果不同的图形有不同的参数设置,则需要将参数设置放在相应的绘图函数中。
2.2.3 图形颜色
使用colors()函数可以查看R全部567种颜色的名称列表;在graphics中
- col主要用于设置绘图区域中绘制的数据符号、线条、文本等元素
- bg用于设置图形的前景颜色(坐标轴、图形的边框)
- fg用于设置图形的背景颜色,如图形区域的颜色
使用多种颜色:col=colors(),col=colors(256),col=rainbow(n, start=0.4, end=0.5) #渐变
2.3 页面布局与图形组合
2.3.1 用par函数布局页面
- 参数mfrow=c(nr, nc)表示按行填充各图;参数mfcol=c(nr, nc)则表示按列填充各图;
2.3.2 使用layout函数布局页面
相当于在每一个小图里面,继续布局。
par(mfrow=c(1,2))
layout(matrix(c(1, 2, 3, 3), nrow=2, ncol=2, byrow=TRUE), heights=c(2, 1))
layout.show(3)#预览
matrix(c(1, 2, 3, 4, 5, 5, 6, 7, 8), 3, 3, byrow=TRUE), widths=c(2:1), heights=c(1:1);宽是2:1
2.3.3 同时打开多个绘图窗口
dev.new();打开多个绘图窗口,以比较不同的图像,最多63个;
第3章 类别数据可视化
3.1 一维表的可视化
data1_1 <- read.csv("D:/soft/other/R/data/mydata/chap01/data1_1.csv")
attach(data1_1)
table2 <- table(网购次数)
bar <- barplot(table2, col=grey.colors(3), ylim = c(0, 1.1*max(table2)), xlab="网购次数", ylab = "人数", cex.names = 0.8, main = "abc")
text(bar, table2, labels = table2, pos = 3) #频数标签
lines(bar, table2, type = "o", col = "red", pch=19) #频数折线
points(bar, table2, type = "h", col = "red", lwd = 1, lty=6) #垂线
或者使用sjPlot;会自动加上频数标签和各类别频数百分比等