R 语言实战 读书笔记

R语言实战(第2版) 学习笔记

1. R语言介绍

1.1 为什么用R语言

bla

1.2 基本操作

图表演示命令 demo()

1.2.1 输入

source("filename") # run script

1.2.2 输出

最后要 dev.off 完成输出

文本文件

sink("filename", append = TRUE, split = TRUE)

append 接在已有文件后面,而不是覆盖;
split 控制台、文件均有输出

图形文件

jpeg("filename.jpeg")

png,bmp,pdf等

2. 数据集

2.1 数据结构

2.1.1 向量 Vector

例: a <- c(1, 2, 5, 7, -2, -20)

标量 指只有一个元素的向量,如f <- 3,通常用于保存常量。 在R里就是单元向量

取值方法: a[3], a[c(1,2,5)], a[2:5]

2.1.1 矩阵 Matrix

构建函数接口:

myMatrix <- matrix(, nrow=, ncol=, byrow=, dimnames=list(,))

个别参数说明: byrow 指定按行或列填充,默认FALSE,即按列填充; dimnames 指定行列的名字。

测试代码:

cells <- 1:6
rnames <- c("R1", "R2")
cnames <- c("C1", "C2", "C3")

myMatrix <- matrix(cells,nrow = 2, ncol = 3, byrow = TRUE, dimnames = list(rnames, cnames))
myMatrix

myMatrix <- matrix(cells,nrow = 2, ncol = 3, byrow = FALSE, dimnames = list(rnames, cnames))
myMatrix

dimnames(myMatrix)
dimnames(myMatrix)[[1]][2] <- "R2name"
myMatrix

myMatrix[1, 2]
myMatrix[1, c(1, 3)]

2.1.3 数组 Array

维度大于2的矩阵

d3names <- c("3rd1", "3rd2")
myArray <- array(1:12, c(2, 3, 2), dimnames = list(rnames, cnames, d3names))
myArray

2.1.4 数据框 Dataframe

包含不同类型的Vector

pid <- 1:4
diabetes <- c("type1","type2","type1","type1")
status <- c("poor","improved","excellent","poor")

patientdata <- data.frame(pid, diabetes, status)

table(patientdata$diabetes, patientdata$status)

with(patientdata,{
    table(diabetes, status)
    mark1 <- 1:4
    mark2 <<- 1
})
mark1
patientdata$mark1
mark2
patientdata$mark2

实例标识符?? 这是什么??

2.1.5 因子 factor

status <- factor(status, order = TRUE, levels = c("poor", "improved", "excellent"))
stauts
status <- factor(status, order = TRUE, levels = 1:3, labels = c("poor", "improved", "excellent"))
stauts
# in default, factors are labeled by alphabet order


diabetes <- factor(diabetes)

patientdata <- data.frame(pid, diabets, status)

# show structure
str(patientdata)
summary(patientdata)

2.1.6 列表 list

包含不同类型对象,对象可以是vector, matrix, dataframe等等

patientlist <- list(patient = patientdata, ages = 20:23, 1:10)
patientlist
patientlist$patientdata
patientlist$ages
patientlist[[2]]
patientlist[["ages"]]

数据输入

2.2.1 键盘输入

mydata <- data.frame(age=numeric(0), gender = character(0))
mydata <- edit(mydata) # equals to fix(mydata)

2.2.2 从csv读取 read from csv

R 语言实战 读书笔记_第1张图片
read.table()参数说明.png

推荐stringAsFactors = FALSE 节省读取时间

2.2.3 从数据库读取 read from db

library(RODBC)
myconn <- odbcConnect("localhost:8080/test", uid="root", pwd="1234")
test.table.data <- sqlQuery(myconn, "select * from T_Test")
close(myconn)

常用函数

R 语言实战 读书笔记_第2张图片
常用函数1.png
R 语言实战 读书笔记_第3张图片
常用函数2.png

2. 图形初阶

2.1 图形参数

2.1.1 符号和线条

dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)

plot(dose, drugA, type = "b")

# 修改图形元素
opar <- par(no.readonly = TRUE)
par(lty=2, pch=17)
plot(dose, drugA, type = "b")
par(opar)

# 更推荐直接在调用时候设置参数
plot(dose, drugA, type = "b", lty = 2, pch = 17)

plot(dose, drugA, type = "b", lty = 3, lwd = 3, pch = 15, cex = 2)

picture here

2.1.2 颜色

2.1.3 文本属性

2.1.4 图形大小

更多可以参阅 help(par)

2.2 添加文本、自定义坐标轴和图例

# xlim是x坐标轴范围,ylim类似
plot(dose, drugA, type = "b",
     col = "red", lty = 2, pch = 2, lwd = 2,
     main = "Main Title", sub = "Subtitle",
     xlab = "xlab name", ylab = "ylab name",
     xlim = c(0, 60), ylim = c(0, 70))

2.2.1 标题

title(main = "Main Title", col.main = "red",
      sub = "Subtitle", col.sub = "green",
      xlab = "xlab name", ylab = "ylab name",
      col.lab = "blue", cex.lab = 0.75)

2.2.2 坐标轴

2.2.3 参考线

abline(h = , v = )
也可以添加 lty,col等参数

2.2.4 图例

picture here

2.2.5 标注

2.3 图形的组合

par(mfrow = c(nrows, ncols))
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE, widths = c(3,1), heights = c(1, 2)))

3. 基本数据管理

3.1 创建新变量

mydata <- data.frame(x1 = c(2, 2, 6, 4),
                     x2 = c(3, 4, 2, 8))
mydata$sumx <- mydata$x1 + mydata$x2
mydata$meanx <- (mydata$x1 + mydata$x2) / 2
mydata <- transform(mydata,
                    sumx = x1 +x2,
                    meanx = (x1 +x2) / 2)                     

3.2 重命名

fix(mydata) or names(mydata) <- c("y1", "y2", "sumy", "meany")

3.3 缺失值

数值函数中的参数na.rm = TRUE
比如sum(x, na.rm = TRUE)

函数na.omit(mydata)可以删除mydata中含有na的行

3.4 日期

3.4.1 格式化输入

从字符串转化用as.Date(x, <"input format">)
picture here
默认格式为"yyyy-mm-dd"

strDates <- c("01/05/1965","08/16/1875")
date <- as.Date(strDates, "%m/%d/%Y")

3.4.2 格式化输出

today <- Sys.Date()
format(today, format = "%B,%d,%Y")

3.4.3 计算

difftime(, , units = "weeks")
可以按星期、天、时、分、秒来表示

3.4.4 转化为字符串

strDates <- as.character(dates)

3.5 类型转换

is.datatype()用于判断,as.datatype()用于转换
上面的"datatype"可以是numeric character vector matrix data.frame factor logical

3.6 排序

newdata <- mydata[order(x1, -x2),]

3.7 合并

内联
total <- merge(dataframeA, dataframeB, by = "ID")
cbind() or rbind()

3.8 子集

newdata <- subset(mydata, x1 > 1 & x1 <6, select = c(x1:x2))

3.9 抽样

mysample <- mydata[sample(1:nrow(mydata), 3, replace = FALSE), ]
1:nrow()行抽3个样本,不进行放回操作
更多抽样功能参照sampling包

3.10 SQL查询

sqldf包 推荐!!

注意: R 语言函数不对 对象 本身进行操作,而是操作其复制体,所以记得赋值

nndata <- sqldf(c("delete from nndata where target = 'target'","select * from nndata"))

4. 数据管理

4.1 数值处理

常用函数:

abs(x), sqrt(x)
ceiling(x), floor(x) # 向上 向下取整
trunc(x) # 取整数部分
round(x, digits = n) # 四舍五入,保留n位小数

mean(x) # z <- mean(x, trim = 0.05, na.rm = TRUE) 去掉最大最小的5%
sum(x) # 求和
median(x) # 中位数
sd(x) # 标准差
var(x) # 方差
mad(x) # 绝对中位差
quantile(x, c(.75, .5, .25)) # 输出x中75%、50%、25%位的数值

diff(x, lag = n) # 之后差分

scale(x, center = TRUE, scale = TRUE) # 进行均值为0,标准差为1的标准化

4.2 概率函数

数学太差看不懂(:з」∠)

4.3 字符串处理

nchar(x) # 长度
substr(x, start, stop) # 子串

# 在x中搜索pattern, `fixed = TRUE`时 pattern为正则表达式, 否则为字符串
grep(pattern, x, ignore.case = FALSE, fixed = FALSE)
sub(pattern, replace, x, ignore.case = FALSE, fixed = FALSE) # 在x中搜索pattern替换为replace
strsplit(x, split, fixed = FALSE) # 在x中的split处拆分字符串

paste(c("a","b"), 1:2, sep = "M") # 拼接字符串
toupper(x) # 转化为大写
tolower(x) # 转化为小写

4.4 其他常用函数

length(x)
seq(from, to, by) # seq(1, 5, 2)生成c(1, 3, 5)
rep(x, n) #将x重复n次
pretyy(x, n) # 将连续的x划分为n个区间,画图常用
cat(..., file = "myfile", append = FALSE) # 拼接...中的对象,输出到myfile中

apply(x, margin, fun, ..) # 将fun函数应用到x的第margin维度

4.5 整合与重构

4.5.1 转置

t(matrix)

4.5.2 整合数据

reshape2包 功能强大,用到再说吧

你可能感兴趣的:(R 语言实战 读书笔记)