R語言實戰(第二版)-part 1筆記


R語言實戰(第二版)

part 1 入門


----------第1章 R語言介紹--------------------

help.start() #幫助文檔首頁
demo() #R語言demo演示
demo(package = .packages(all.available = TRUE))
demo(image) #演示圖像
example("mean") #函數mean使用示例

library(ggplot2);library(pheatmap)
example("ggplot") #演示R包
example("pheatmap") #par(ask=F)

vignette() #文檔
vignette("dplyr")
options() #顯示或設置當前選項
options(digits = 2)
help("option") #/help(options)

q() -> y #退出保存.Rhistory和.RData
dir.create("./test") #建立新目錄
getwd()
ls() #列出對象
rm(list = ls()) #清空對象

save.image("./test.RData") #保存工做空間
load("./test.RData") #讀取工做空間

source("./test.R") #執行腳本
pdf("test.pdf")
png("test.png")
dev.off()


library() #顯示庫中的包
.libPaths() #庫路徑
search() #顯示哪些包已加載
help(package="ggplot2")
update.packages()

#R CMD BATCH <options> test.R test.Rout #Linux終端批處理
#<R/path/R.exe> CMD BATCH --vanilla --slave "test.R" #window 批處理

help(mtcars) #示例數據幫助
lmfit <- lm(mpg~wt, mtcars)
summary(lmfit)
plot(lmfit)
cook <- cooks.distance(lmfit)
plot(cook)
predict(lmfit,newdata)

----------第2章 建立數據集------------

#行列:observation-variable, record-field, example-attribute
#數值型變量,字符型變量;類別型(因子):有序,名義
#向量、矩陣、數組、數據框、因子、列表
matrix(1:20,nrow = 4,ncol = 5,byrow = F,dimnames = list(c("A","B","C","D"),c("math","eng","chinese","music","art")))
array(1:24,c(2,3,4),dimnames = list(c("A","B"),c("a","b","c"),c("test1","test2","test3","test4"))) #2行3列4維
#數據框選擇列
mtcars[1:2]
mtcars[c("mpg","cyl")]
mtcars$mpg

#環境中有同名對象時不適用
attach(mtcars)
plot(mpg,wt)
detach(mtcars)

#賦值僅在with函數中有效
with(mtcars,{
  stats <- summary(mpg)
  out <<- summary(mpg) #使用特殊賦值符<<-可在括號外使用,寫入全局變量,慎用
})
stats
out

#字符型向量因子水平默認以字母順序建立,可用levels參數指定順序
factor(c("poor","improved","excellent"),order=T)
factor(c("poor","improved","excellent"),order=T,levels = c("poor","improved","excellent"))
#數值型向量可編碼爲因子
factor(c(1,2),levels = c(1,2),labels = c("male","female"))

#列表元素
list[[2]]
list[["ages"]]
list$ages

#從鍵盤輸入數據
data <- data.frame(age=numeric(0),gender=numeric(0),weight=numeric(0)) #建立空的數據框
data <- edit(data) #手動輸入
data
newdata <- fix(data) #直接修改數據, 原data數據也將改變
newdata
data
newdata2 <- edit(data) #編輯並另存爲數據,原data數據不會變
newdata2
data

read.table(colClasses = c("character"),row.names = "geneID",stringsAsFactors = F) 
#如讀入以0開頭的文本時保留0,如股票0010; 如若不以第一行爲行名,指定某行; 默認轉換字符變量爲因子,設爲F,可提高讀取速度。
xlsx::read.xlsx("./test.xlsx",1) #1表工做表序號

#數據對象函數
length()
dim/str/class/mode
names()
cbind/rbind
head/tail

----------第3章 圖形初階--------------------

dev.new() #畫圖前新建一個圖形窗口
plot(mtcars$mpg,mtcars$cyl)
dev.off() #關閉圖形窗口,與pdf等連用

par(no.readonly = T,lty=2,pch=7) #設置圖形參數

pch #點符號0-25
cex #符號大小
lty #線條類型1,2,3,4,5,6
lwd #線條寬度
col #默認的繪圖顏色
col.axis  #座標軸刻度文字顏色
col.lab #座標軸名稱顏色
col.main #標題顏色
col.sub #副標題顏色
fg #圖形前景色
bg #圖形背景色
cex.axis #座標軸刻度文字縮放倍數
cex.lab #座標軸名稱縮放倍數
cex.main #標題縮放倍數
cex.sub #副標題縮放倍數
font #字體樣式,1常規,2粗體,3斜體,4粗斜體,5符號字體
font.axis
font.lab
font.main
font.sub
ps #字體磅值
family #字體族,serif襯線,sans無襯線,mono等寬
pin #圖形尺寸(寬高),英寸
mai #邊界大小,下左上右,英寸
mar #邊界大小,下左上右,英分


#表示顏色的方法:
col=1 #顏色下標
col="white" #名稱
col="#FFFFFF" #十六進制
col=rgb(1,1,1) #RGB值(基於紅綠藍三色生成)
col=hsv(0,0,1) #HSV值(基於色相-飽和度-亮度生成)

colors() #查看全部顏色

library(RColorBrewer)
n <- 7
mycolors <- brewer.pal(n,"Set1") #Set1調色板中選取n種
barplot(rep(1,n),col = mycolors)

brewer.pal.info #調色板列表
display.brewer.all() #調色板展現

mycolors2 <- rainbow(n) #彩虹色
pie(rep(1,n),labels = mycolors2,col = mycolors2)

mygrays <- gray(0:n/n) #n階灰度色
pie(rep(1,n),labels = mygrays,col = mygrays)

names(pdfFonts()) #系統中可用字體

abline(v=seq(1,10,2),lty=2,col="blue") #添加參考線
legend() #添加圖例
text() #繪圖區內部添加文本,一般用於標示圖形中的點
mtext() #圖形邊界之一添加文本
plotmath() #添加數學符號
demo(plotmath)

#圖形組合排布
par(mfrow=c(2,2)) #按行
par(mcol=c(1,3)) #按列
layout()

------------------第4章 基本數據管理------------

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

x%%y #求餘
4%%3
x%/%y #取整
5%/%2

is.na() #NA
is.infinite() #Inf,-Inf
is.nan() #NaN

#多數數值函數中含有na.rm=T參數
sum(x,na.rm = T)
na.omit()

Sys.Date()
date()
as.Date("2019-3-5")
as.Date("02/17/2019","%m/%d/%Y")
difftime(Sys.Date(),"2019-3-1",units = "days")

is.numeric()/is.character()/is.vector()/is.matrix()/is.data.frame()/is.factor()/is.logical() #判斷,與if-then聯合使用
as.numeric()/as.character()/as.vector()/as.matrix()/as.data.frame()/as.factor()/as.logical() #轉換

#排序函數
#order 返回排序後的索引
mtcars[order(mtcars$mpg,-mtcars$cyl),]
#sort 直接排序,返回排序後結果
sort(mtcars$mpg,decreasing = T)
#rank 返回排名(相同排名會出現小數)
rank(mtcars$mpg)

#合併函數
merge(df1,df2,by=c("ID","Country"))
cbind(df1,df2,df3) #必須相同行數,以同順序排序
rbind(df1,df2)
dplyr::left_join(df1,df2,by="ID") #right_join/full_join

mtcars[,c(2:4)] #選列
mtcars[,c(-2,-5)] #剔除列
mtcars$hp <- mtcars$wt <- NULL #剔除兩列,NULL未定義(不一樣於NA)
mtcars[!(names(mtcars) %in% c("hp","wt"))] #是否包含所選列名

mtcars[1:3,] #選行
mtcars[mtcars$mpg>20 & mtcars$vs=="0",]

#取子集
subset(mtcars,mpg>20 | hp<90,select = mpg:hp) #選行又選列

#隨機抽樣
mtcars[sample(1:nrow(mtcars),3,replace=F),]

--------------第5章:高級數據管理--------------

#1.數學函數
abs(-1)
sqrt(25)
ceiling(3.2) #不小於某值的最小整數
floor(3.2) #不大於某值的最大整數
trunc(3.2) #截取整數
round(3.456,digits = 2) #保留2位小數(四捨五入)
signif(3.456,digits=2) #保留2位有效數字(四捨五入)
cos(x)/sin(x)/tan(x)
acos(x)/asin(x)/atan(x)
log(4,base = 2)
log(10) #取天然對數,而非ln(4)
log10(10) #經常使用對數
exp(2) #指數,即e^2

#總結R語言中取整運算主要包括如下五種:floor()向下取整,ceiling()向上取整,round()四捨五入取整,turnc()向0取整,signif()保留給定位數的精度
#以上函數可直接用在數值向量、矩陣或數據框中

#2.統計函數
x <- c(1,1.2,4,3,6,9,3,23,0.001,10)
mean(x)
mean(x,trim = 0.05,na.rm = T) #去掉最大和最小的5%數據以及缺失值後的均值
median(x)
sd(x) #標準差
var(x)
mad(x) #絕對中位差:統計離差,是一種魯棒統計量,MAD=median(∣Xi-median(X)∣)
quantile(x) #求分位數
quantile(x,1/4) #25%分位數
quantile(x,0.9) #90%分位數
range(x) #值範圍
sum(x)
diff(x) #滯後差分,默認滯後1位,即後一位數減前一位數
diff(x,lag = 2)
min(x)
max(x)
scale(x) #按列進行中心化或標準化
scale(x,center = T,scale = T) #默認。center中心化,center和scale標準化
scale(dataframe) #一樣對矩陣或數據框的列進行均值爲0,標準差位1的標準化,至關於Z score
scale(dataframe)*sd+m #進行任意均值m和標準差sd的歸一化
transform(dataframe,var=scale(var)) #僅對矩陣/數據框的指定列進行歸一化

#3.機率函數
#d=密度函數density
#p=分佈函數
#q=分位數函數quantile
#r=隨機數生成函數random

#eg:正態分佈norm
dnorm(x) 
pnorm(1.96) #曲線下方面積
qnorm(0.9,mean = 100,sd=200) #0.9分位點值
rnorm(50,mean = 50,sd=10) #生成50個正態隨機數

a <- pretty(c(-5,5),30) #pretty(x, n)建立美觀的分割點,將一個連續型變量x分割爲n個區間,繪圖中經常使用。
b <- dnorm(a)
plot(a,b,type = "l")

#其餘機率分佈:
beta/binom/chisq/exp/f/gamma/geom/hyper/logis/multinom/nbinom/pois/signrank/t/unif/weibull/wilcox.......

runif(5) #生成(0,1]上服從均勻分佈的僞隨機數
runif(5) #隨機數每次都不一樣

set.seed(123) #設定種子,使下次結果重現。數字可隨意設定,復現時指定相同便可。
runif(5)
set.seed(123)
runif(5) #復現結果,需與set.seed連用

#4.字符處理函數
x <- "adb234FGdef"
nchar(x) #字符長度,length(x)是元素的個數
length(x)

substr(x,2,4) #提取子串
grep("FG",x) #返回匹配下標
sub("FG","yx",x)
sub("\\s",".","hello world") #R語言轉義\\
sub("\\.","_","hello.world") #"."須要中括起來或加轉義\\,否則默認爲一個字符
grepl()
gsub()

strsplit(x,"")
unlist(strsplit(x,"234"))[2]
sapply(strsplit(x,"234"), "[",2) # "["表提取某個對象一部分,即提取第2個元素

paste(x,1:3,sep = "_")
paste0(x,1:3)

toupper(x) #大寫轉換
tolower(x) #小寫轉換

#其餘函數
seq(1,10,2)
rep(1:7,3)
cut(c(1:20),breaks=4) #將連續變量切割n個區間(水平因子)
table(cut(c(1:20),breaks=4,labels = c("a","b","c","d")))
pretty(c(1:20),4) #建立美觀分割點(n個),經常使用繪圖

apply(mtcars, 2, sum)
mydata <- matrix(rnorm(30),nrow = 6)
apply(mydata, 1, mean)
apply(mydata, 2, mean, trim=0.2) #可直接加函數參數
fix(mydata) #加個NA試試
apply(mydata, 2, mean, na.rm=T)

lapply() #返回列表
sapply() #返回向量

#按條件建立新變量
mtcars$new[mtcars$mpg >20 & mtcars$vs=="0"] <- "yes"
mtcars$new[mtcars$mpg <=20 & mtcars$vs=="1"] <- "no"
head(mtcars)

#控制流
#基本概念:語句{statement},條件cond(T or F),表達式expr,序列seq
#1.循環
for(i in 1:10) print("hello")
i=10;while (i>0) {print("hello");i=i-1} #確保while中條件可變

#2.條件
#if-else結構
grade <- "10"
if(!is.factor(grade)) grade <- as.factor(grade) else print("grade already is factor")

#ifelse結構(緊湊)
ifelse(as.numeric(grade)>9,"passed","failed")

#switch結構 (選擇)
for (i in c("sad","happy"))
  print(
    switch(i,
      happy="yes",
      sad="no",
      angry="nono"
    )
  )

#3.自編函數
#描述統計量計算函數
mystats <- function(x,parametric=T,print=F){
  if(parametric){
    center <- mean(x);spread <- sd(x)  #參數統計量
  }else{
    center <- median(x);spread <- mad(x) #非參統計量
  }
  if(print & parametric){
    cat("mean=",center,"\n","sd=",spread,"\n")
  }else if(print & !parametric){
    cat("median=",center,"\n","mad=",spread,"\n")
  }
  result <- list(center=center,spread=spread)
  return(result)
}

##驗證以上函數
set.seed(123)
x <- rnorm(100)
mystats(x)
mystats(x,parametric = F)
mystats(x,parametric = F,print = T)
mystats(x,parametric = T,print = T)


#switch自編函數
mydate <- function(type="long"){
  switch(type,
         long=format(Sys.time(),"%A %B %d %Y"),
         short=format(Sys.time(), "%m-%d-%y"),
         cat(type, "is note a recognized type\n") 
         #cat捕獲用戶輸入錯誤,也可用warning(提示錯誤),message(診斷信息),stop(中止執行)等函數
         )
}

##驗證以上函數
mydate()
mydate("long") #默認
mydate("short")
mydate("x")


#整合(aggregate)和重塑(reshape)
t(mtcars)
head(mtcars)
aggregate(mtcars, by=list(mtcars$cyl,mtcars$gear), FUN = mean, na.rm=T)

library(reshape2)
md <- melt(mtcars,id=c("mpg","cyl")) #融合,寬數據變長數據
#提取id列,其餘列所有融合
md2 <- dcast(md,mpg+cyl~variable) #重塑,長數據變寬數據
head(md2)
dcast(md,mpg+variable~cyl)
dcast(md,cyl+variable~mpg)
#使用mpg對cyl和variable分組
#公式的左邊每一個變量都會做爲結果中的一列,而右邊的變量被當成因子類型,每一個水平都會在結果中產生一列。

dcast(md,mpg~variable,mean)
dcast(md,cyl~variable,mean)
dcast(md,mpg~cyl,mean)

#dcast-輸出時返回一個數據框。acast-輸出時返回一個向量/矩陣/數組
相關文章
相關標籤/搜索