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(<vector>, nrow=<number of rows>, ncol=<number of columns>, byrow=<TRUE or FALSE>, dimnames=list(<vector of rownames>,<vector of colnames>))

个别参数说明: 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

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)

常用函数

常用函数1.png
常用函数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 = <yvalues>, v = <xvalues>)
也可以添加 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(<end>, <start>, 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包 功能强大,用到再说吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容