R 語(yǔ)言實(shí)戰(zhàn) 讀書(shū)筆記

R語(yǔ)言實(shí)戰(zhàn)(第2版) 學(xué)習(xí)筆記

1. R語(yǔ)言介紹

1.1 為什么用R語(yǔ)言

bla

1.2 基本操作

圖表演示命令 demo()

1.2.1 輸入

source("filename") # run script

1.2.2 輸出

最后要 dev.off 完成輸出

文本文件

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

append 接在已有文件后面,而不是覆蓋;
split 控制臺(tái)、文件均有輸出

圖形文件

jpeg("filename.jpeg")

png,bmp,pdf等

2. 數(shù)據(jù)集

2.1 數(shù)據(jù)結(jié)構(gòu)

2.1.1 向量 Vector

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

標(biāo)量 指只有一個(gè)元素的向量,如f <- 3,通常用于保存常量。 在R里就是單元向量

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

2.1.1 矩陣 Matrix

構(gòu)建函數(shù)接口:

myMatrix <- matrix(<vector>, nrow=<number of rows>, ncol=<number of columns>, byrow=<TRUE or FALSE>, dimnames=list(<vector of rownames>,<vector of colnames>))

個(gè)別參數(shù)說(shuō)明: byrow 指定按行或列填充,默認(rèn)FALSE,即按列填充; dimnames 指定行列的名字。

測(cè)試代碼:

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 數(shù)組 Array

維度大于2的矩陣

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

2.1.4 數(shù)據(jù)框 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

實(shí)例標(biāo)識(shí)符?? 這是什么??

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

包含不同類型對(duì)象,對(duì)象可以是vector, matrix, dataframe等等

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

數(shù)據(jù)輸入

2.2.1 鍵盤(pán)輸入

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()參數(shù)說(shuō)明.png

推薦stringAsFactors = FALSE 節(jié)省讀取時(shí)間

2.2.3 從數(shù)據(jù)庫(kù)讀取 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)

常用函數(shù)

常用函數(shù)1.png
常用函數(shù)2.png

2. 圖形初階

2.1 圖形參數(shù)

2.1.1 符號(hào)和線條

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)

# 更推薦直接在調(diào)用時(shí)候設(shè)置參數(shù)
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 添加文本、自定義坐標(biāo)軸和圖例

# xlim是x坐標(biāo)軸范圍,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 標(biāo)題

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 坐標(biāo)軸

2.2.3 參考線

abline(h = <yvalues>, v = <xvalues>)
也可以添加 lty,col等參數(shù)

2.2.4 圖例

picture here

2.2.5 標(biāo)注

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. 基本數(shù)據(jù)管理

3.1 創(chuàng)建新變量

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 缺失值

數(shù)值函數(shù)中的參數(shù)na.rm = TRUE
比如sum(x, na.rm = TRUE)

函數(shù)na.omit(mydata)可以刪除mydata中含有na的行

3.4 日期

3.4.1 格式化輸入

從字符串轉(zhuǎn)化用as.Date(x, <"input format">)
picture here
默認(rèn)格式為"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 計(jì)算

difftime(<end>, <start>, units = "weeks")
可以按星期、天、時(shí)、分、秒來(lái)表示

3.4.4 轉(zhuǎn)化為字符串

strDates <- as.character(dates)

3.5 類型轉(zhuǎn)換

is.datatype()用于判斷,as.datatype()用于轉(zhuǎn)換
上面的"datatype"可以是numeric character vector matrix data.frame factor logical

3.6 排序

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

3.7 合并

內(nèi)聯(lián)
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個(gè)樣本,不進(jìn)行放回操作
更多抽樣功能參照sampling包

3.10 SQL查詢

sqldf包 推薦!!

注意: R 語(yǔ)言函數(shù)不對(duì) 對(duì)象 本身進(jìn)行操作,而是操作其復(fù)制體,所以記得賦值

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

4. 數(shù)據(jù)管理

4.1 數(shù)值處理

常用函數(shù):

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

mean(x) # z <- mean(x, trim = 0.05, na.rm = TRUE) 去掉最大最小的5%
sum(x) # 求和
median(x) # 中位數(shù)
sd(x) # 標(biāo)準(zhǔn)差
var(x) # 方差
mad(x) # 絕對(duì)中位差
quantile(x, c(.75, .5, .25)) # 輸出x中75%、50%、25%位的數(shù)值

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

scale(x, center = TRUE, scale = TRUE) # 進(jìn)行均值為0,標(biāo)準(zhǔn)差為1的標(biāo)準(zhǔn)化

4.2 概率函數(shù)

數(shù)學(xué)太差看不懂(:з」∠)

4.3 字符串處理

nchar(x) # 長(zhǎng)度
substr(x, start, stop) # 子串

# 在x中搜索pattern, `fixed = TRUE`時(shí) pattern為正則表達(dá)式, 否則為字符串
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) # 轉(zhuǎn)化為大寫(xiě)
tolower(x) # 轉(zhuǎn)化為小寫(xiě)

4.4 其他常用函數(shù)

length(x)
seq(from, to, by) # seq(1, 5, 2)生成c(1, 3, 5)
rep(x, n) #將x重復(fù)n次
pretyy(x, n) # 將連續(xù)的x劃分為n個(gè)區(qū)間,畫(huà)圖常用
cat(..., file = "myfile", append = FALSE) # 拼接...中的對(duì)象,輸出到myfile中

apply(x, margin, fun, ..) # 將fun函數(shù)應(yīng)用到x的第margin維度

4.5 整合與重構(gòu)

4.5.1 轉(zhuǎn)置

t(matrix)

4.5.2 整合數(shù)據(jù)

reshape2包 功能強(qiáng)大,用到再說(shuō)吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容