R语言学习笔记(一)
生活随笔
收集整理的這篇文章主要介紹了
R语言学习笔记(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通過網易云課堂進行的學習:
第四節 輸入文件地址時,上下級之間使用一個反斜杠或者兩個斜杠 setwd("d:/Rstudy/code") setwd("d:\\Rstudy\\code") 安裝包 install.packages("ggplot2") 加載包 library(ggplot2) 創建一個對象并把它賦值給一個變量 x1<-c(1,2,3,4,5,6) x2<-c(2,4,6,8,10,12) 也可以使用‘=’但是據說極少情況下會報錯,因此無論是專家還是小白都用 '<-' , '>-' 來表示‘=’ ?第五節 自定義函數 myfun_cv<-function(x) x 表示一個向量 一串數字 {#函數在R中也是一個對象 cv<-sd(x)/mean(x) ?#函數的語句體用來計算變異系數 sd (x)表示標準差 mean(x) 表示均值 return(cv) #函數執行完畢后返回cv值,該值就是變異系數?? }#測試該函數 a<-c(1,2,5,6,8,9) #生成一個變量 myfun_cv(a) #調用自定義函數來計算變異系數
目錄生成:前面至少一個,后面添加四個####
附上:課堂老師給的自學代碼(一): ps:內容來源于網絡,僅供學習參考,請勿用于商業用途
################《R語言基礎課程》####################
###1.R語言介紹####
###1.1R語言歷史#### #R是S語言的一種實現。S語言是由 AT&T貝爾實驗室開發的一種用來進行數據探索、 #統計分析、作圖的解釋型語言。最初S語言的實現版本主要是S-PLUS。 #S-PLUS是一個商業 軟件,它基于S語言,并由MathSoft公司的統計科學部進一步完善。 #后來Auckland大學的Robert Gentleman 和 Ross Ihaka 及其他志愿人員開發了一個R系統。 #R的使用與S-PLUS有很多類似之處,兩個軟件有一定的兼容性。
###1.2R的特點#### #1.有效的數據處理和保存機制。 #2.擁有一整套數組和矩陣的操作運算符。 #3.一系列連貫而又完整的數據分析中間工具。 #4.圖形統計可以對數據直接進行分析和顯示,可用于多種圖形設備。 #5.一種相當完善、簡潔和高效的程序設計語言。它包括條件語句、循環語句、用戶自定義的遞歸函數以及輸入輸出接口。 #6.R語言是徹底面向對象的統計編程語言。 #7.R語言和其它編程語言、數據庫之間有很好的接口。 #8.R語言是自由軟件,可以放心大膽地使用,但其功能卻不比任何其它同類軟件差。 #9.R語言具有豐富的網上資源
###2.Rstudio和R的基本操作####
#2.1查看R語言自帶的數據集#### data()
#直接輸入數據集的名稱,查看這些數據 CO2
#2.2快捷鍵#### #Ctrl+Enter:運行光標所在行的代碼,也可以用來運行鼠標選中區域的代碼 #Ctrl+L:清除控制臺中的代碼 #Ctrl+shift+S:運行代碼集中的所有代碼 #Ctrl+1:跳轉到代碼編輯環境 #Ctrl+2:跳轉到控制臺 #Ctrl+D:刪除代碼集中光標所在行的代碼
#2.3查看數據集的前6行#### head(CO2)
#查看數據集最后的6行 tail(CO2)
#2.4安裝包(可以通過命令或者通過圖形界面來安裝)#### install.packages("ggplot2")
#加載包 library(ggplot2)
#2.5創建向量和矩陣,以及對它們的基本操作#### x1<-c(1,2,3,4,5,6) x2<-c(2,4,6,8,10,12)
length(x1)
mode(x1)
class(x1)
rbind(x1,x2)
cbind(x1,x2)
Dmat<-cbind(x1,x2) class(Dmat)? ? ? ? ? ? ? ? ?#使用c函數結合的變量組成的是矩陣
Dmat2<-rbind(x1,x2) class(Dmat2)
Dframe<-as.data.frame(cbind(x1,x2)) class(Dframe)
Dmat;Dframe? ? ? ? ? #矩陣和數據框格式是不一樣的,矩陣是由行列組成的,數據框是由記錄和變量組成的
a<-c(1:100)
length(a)
cbind(a)
a
#2.6常用的函數#### b<-c(1:20)
mean(b)
sum(b)
max(b)
min(b)
sd(b)
#產生向量 1:5
1:5*2
1:5*2+1
#2.8查看內存中已有的對象#### ls()
#刪除當前內存中的所有對象 rm(list = ls())
ls()
#2.9訪問向量中的元素#### a<-1:5*2-1
a
a[3]
a[-3]
a[2:4]
a[-(2:4)]
a[1,2,3]? ? #不能這樣訪問向量中的元素
a[c(1,2,3)]
a[a<=5]
a[a<=3 | a>=7]
a[a>=3 & a<=7]
a[a[2]]
#2.10 seq()函數和rep()函數,用來產生等差數列的函數,調用示例函數#### example("seq")
seq(0, 1, length.out = 11)
seq(stats::rnorm(20))
seq(1, 9, by = 2)
seq(1, 9, by = pi)
seq(1, 6, by = 3)
seq(1.575, 5.125, by = 0.05)
seq(17)
example("rep")
rep(c("a","b","c"),each=4)
rep(c("a","b","c"),4)
#2.11 產生字母序列#### letters[1:30]
#2.12 which()函數#### a<-rnorm(10) a
which.max(a)
a[which.max(a)]
which(a==a[which.max(a)])
which(a>0)
a[which(a>0)]
#2.13 排序函數#### a<-1:10 a
rev(a)? ? ? ? #反轉順序
a<-c(3,1,5,6,9,2,7,4,6,5)
sort(a)
rev(sort(a))
#2.14 生成矩陣#### a<-c(1:36)
a1<-matrix(a,nrow = 9,ncol = 4);a1
a2<-matrix(a,nrow = 4,ncol = 9);a2
a3<-matrix(a,nrow = 9,ncol = 4,byrow = TRUE);a3
dim(a1)? ? ? ? ? ?#dim函數用來查看矩陣的維度
dim(a2)[1]? ? ? ? #行
dim(a3)[2]? ? ? ? #列 #矩陣運算 t(a1)
a1+a2
a1+a3
#2.15 改變Rstudio的工作界面(通過tools里面的layout設置完成)####
#2.16 設定工作目錄,方便載入數據.將數據存放在設定的目錄中,載入數據時就不用指定路徑了#### setwd("D:/Rstudy/data") setwd("D:\\Rstudy\\data")
getwd()? ?#用于知道當前工作目錄
#2.17 help()函數 #### help("seq") ?seq help(package="ggplot2")? #獲取對整個包的幫助文件
#2.18 example()函數 #### example("seq") example("plot") example("hist")
#搜索自己需要的函數 help.search("multivariate normal")
#2.19 數據框。dataframe#### ##數據框就是一個數據表格,一行表示一個記錄,一列表示一個變量
x1<-c(1,2,3,4,5,6,7,8,9) x2<-c(2,4,6,8,10,12,14,16,18) x<-data.frame(x1,x2);x
x=data.frame('重量'=x1,'運費'=x2);x
x$"費率" <- x$運費/x$重量 #數據框可以利用已有的變量產生新的變量并存儲于當前數據框中
names(x)? ? ?#查看數據框中的變量
str(x)? ? ? ?#查看數據框中數據的定義
#我們在載入數據后,要使用上面的兩個函數來檢查數據載入是否成功,并檢查數據的定義
###2.20 列表 list()#### x1<-1? ? ? ? ? ? ? ? ? ? #單個數字,其實是一個只有一個元素的一維向量
x2<-c(1,2,3,4)? ? ? ? ? ?#有四個元素的一維向量
x3<-c("a","bc","d")? ? ? #字符向量
x4<-matrix(1:36,nrow = 9,ncol = 4)? ?#矩陣,vector
x5<-data.frame(a=c(1,2,3,4),b=c(2,3,4,5),c=c(3,4,5,6))
list_01<-list(x1=x1,x2=x2,x3=x3,x4=x4,x5=x5)? ? ? ? #產生一個數據框
list_01$x3 ###3.數據導入與導出####
#3.1 先把R內置的CO2數據集導出,然后再練習導入操作#### write.table(CO2,file = "二氧化碳.txt") write.csv(CO2,file = "二氧化碳.csv")
#3.2 導入逗號分割的文本文件#### read.table(file = "二氧化碳.txt",header = TRUE)
#最好給指定一個名稱# carbon<-read.table(file = "二氧化碳.txt",header = TRUE)
#3.3 導入csv格式的數據#### carbon_csv<-read.csv(file = "二氧化碳.csv",header = TRUE)
#3.4 通過剪貼板讀入數據并寫入文件#### setwd("d:/Rstudy/data") clipboard<-read.table("clipboard",header = TRUE) clipboard
write.table(clipboard,file = "clipboard.txt")
#3.5 導入空格分割的文本文件數據#### setwd("d:/Rstudy/data") lowtem<-read.table(file = "lowtemperature.prn",header = TRUE) names(lowtem);str(lowtem)
lowtem$fyear<-factor(lowtem$year,c(2013,2014,2015),labels = c("2013年","2014年","2015年")) #此處設計重新編碼變量的操作
head(lowtem)
#3.5.1 讀取數據框中的變量####
#1)很多函數中有data參數,可以指定數據框,然后在函數內部直接訪問數據框中的變量 boxplot(lowtem~year,data = lowtem) #2)使用美元符號$ boxplot(lowtem$lowtem~lowtem$year) #3)使用attach函數,不推薦使用,很容易出錯,特別是在同一個R代碼集中寫很多不同程序的時候 attach(lowtem) boxplot(lowtem~year) detach(lowtem) ###3.6 數據子集操作####
#1)先明確分類變量有幾個類別 unique(lowtem$year) #2)選擇數據子集 lowtem_15<-lowtem[lowtem$year==2015,] plot.ts(lowtem_15$lowtem) #3)多個條件用邏輯連接符號進行連接 lowtem_1501<-lowtem[lowtem$year==2015&lowtem$day=="1/1",] lowtem_1501 #4)排序操作
#按照日最低氣溫進行排序,這個排序可能沒有實際意義,這里只是演示操作的方便
orderlowtem<-lowtem[order(lowtem$lowtem),]? ?#對行的操作 View(orderlowtem)
#5)合并數據子集
#加入三年的氣溫數據是分開的,我們要將他們合并到一個數據集中 #(1)先讀入數據 setwd("D:/Rstudy/data") hightem<-read.table("clipboard",header = TRUE)? ? ? ? ?#通過剪貼板讀入數據
write.table(hightem,file = "hightem.txt",quote = FALSE)? #將這個數據保存以便于下次使用
lowtem<-read.table(file = "lowtemperature.prn",header = TRUE) #(2)然后進行合并
colnames(hightem)<-c("day","year","hightem")? ?#由于變量名稱大小寫不一致,對最高溫度的數據集變量名稱進行重命名
tem<-merge(hightem,lowtem,by=c("year","day"))
tem$day<-as.Date(tem$day)
#(3)合并后有一個問題,時間序列被打亂了 #暫時解決辦法是把文件寫入csv文件,用excel重新編輯日期,并排序以后重新導入
tem_new<-read.csv(file = "tem.csv",header = TRUE) head(tem_new)
#3.7 讀入Excel格式的文件#### install.packages("RODBC")? ?#注意有些包只在特定版本中能夠運行,更新問題 library(RODBC)
xls<-odbcConnectExcel("wechat.xls")
###4.常用的函數####
###4.1 tapply函數(對某數值變量依據另外一個分類變量求某值)#### setwd("D:/Rstudy/data")
tem_new<-read.csv(file = "tem.csv",header = TRUE)? #讀入數據文件 head(tem_new) str(tem_new)
tapply(tem_new$lowtem, tem_new$year, mean)? ?#計算最低氣溫均值
tapply(tem_new$hightem, tem_new$year, mean)? #計算最高氣溫均值
tapply(tem_new$lowtem, tem_new$year, sd)? ? ?#計算最低氣溫方差
###4.2 sapply()函數和lapply()函數(對多個變量求某函數的結果)####
sapply(tem_new[,4:5],mean)? ?#輸出為向量
lapply(tem_new[,4:5],mean)? ?#輸出為列表
###4.3 summary()函數 用來輸出匯總信息#### a<-summary(tem_new)
b<-summary(tem_new$year)
c<-summary(c(1,2,3,4,5,6,7,8,9))
d<-lm(tem_new$hightem~tem_new$lowtem)
e<-summary(d)
class(a);class(b);class(c);class(d);class(e)? #summary函數的輸出非常豐富,是一種列表
e$coefficients
###4.4 table函數 (單變量的頻數統計,多分類變量的交叉分析)
example("table")? #直接調用example函數來查看它的用法
#4.4.1簡單的頻數統計#### rpois(100, 5) table(rpois(100, 5))
#4.4.2 查看表的結構(可用于對數據框中兩個分類變量進行交叉分析)#### View(warpbreaks) with(warpbreaks, table(wool, tension))
###5.繪圖工具#### #5.1 基本繪圖函數plot()#### View(cars) help(cars)? ? ?#行駛速度與剎車距離
head(cars)
plot(cars)
plot(cars$dist~cars$speed)? ?#指定y軸表示剎車距離
plot(cars$speed~cars$dist)? ?#指定x軸表示剎車距離
#5.2 為了方便將兩幅圖畫在一起進行對比####
windows()? ? ? ? ? ? ? ? ? ? #用單獨的窗口顯示圖形以獲得更好的顯示效果,注意windows命令在前
par(mfrow=c(2,2))? ? ? ? ? ? #c(2,2)表示生成一個2*2的矩陣
plot(cars$dist~cars$speed)?
plot(cars$speed~cars$dist)
#5.3 函數的參數####
plot(cars$dist~cars$speed, # y~x main="剎車距離與車速之間的關系",? ? ? # 畫標題 xlab="Speed (miles per hour)",? ? ? ? #X坐標軸標題 ylab="Distance travelled (miles)",? ? #Y坐標軸標題 xlim=c(0,30),? ? ? ? ? ? ? ? ? ? ? ? ?#設置X軸范圍為從0到30 ylim=c(0,140),? ? ? ? ? ? ? ? ? ? ? ? #設置Y軸范圍為從0到140 xaxs="i",? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#設置X軸風格internal yaxs="i",? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#設置Y軸風格internal col="red",? ? ? ? ? ? ? ? ? ? ? ? ? ? #設置“散點”的顏色為紅色 pch=19)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#設置散點的形狀為實心圓點
#5.4繪制線圖#### #使用微信公眾號用戶數據 setwd("d:/Rstudy/data")
num<-read.csv(file = "wechat.csv") head(num)
windows() plot(num$NetGrowth~as.Date(num$date), type="l", mian="每日凈增長變化", xlab="日期", ylab ="凈增長人數",col="red" )
#5.5 低水平繪圖函數lines()#### lines(num$NetGrowth~as.Date(num$date),col="red")
example("lines")
plot(cars, main = "Stopping Distance versus Speed")
lines(stats::lowess(cars))? ?#此段代碼為散點圖加上光滑的曲線
#5.6 柱形圖#### #使用數據集BOD View(BOD)
#使用基礎繪圖包 barplot(BOD$demand,names.arg = BOD$Time) #先輸出頻數表,然后在用條形圖繪制 table(mtcars$cyl) barplot(table(mtcars$cyl))
#改變圖形的方向 windows() par(mfrow=c(1,2)) barplot(BOD$demand,names.arg = BOD$Time) barplot(BOD$demand,names.arg = BOD$Time,horiz = TRUE)
###5.7.繪制直方圖#### windows() par(mfrow=c(1,2)) hist(mtcars$mpg)
hist(mtcars$mpg,breaks=10)? ?#控制分區數目
###5.8繪制箱線圖#### #使用數據集ToothGrowth View(ToothGrowth) #使用plot函數時,當x軸為分類變量,y軸為數值型變量時,默認輸出箱線圖 plot(ToothGrowth$supp,ToothGrowth$len)
###5.9 繪圖設備(輸出圖形的格式)####
?device? ? #查看可以使用的圖形設備
setwd("d:/Rstudy/image") pdf("boxplot.pdf")? ? ? ? ? #在圖形設備中輸出圖形名稱 plot(ToothGrowth$supp,ToothGrowth$len) dev.off()? ? ? ? ? ? ? ? ? ?#關閉當前圖形設備,相當于保存該圖形
png("boxplot.png") plot(ToothGrowth$supp,ToothGrowth$len) dev.off()
pdf("綜合圖.pdf")? ?#在你希望將所有圖形輸出到一個文件中時,這樣做,不支持PNG格式 hist(mtcars$mpg) hist(mtcars$mpg,breaks=10) plot(ToothGrowth$supp,ToothGrowth$len)
dev.off()
#圖形設備設置
dev.cur()? #查看當前正在使用的圖形設備
dev.set(3) #把當前正在使用的圖形設別設置為其它設備
#5.10 其他常用圖形#### example("pie")? ? #查看餅圖的使用方法和示例
example("plot.ts")#時間序列圖示例
#5.11 繪圖參數####
setwd("d:/Rstudy/data") wec<-read.csv(file = "wechat.csv",header = TRUE)
head(wec) windows() plot.ts(wec$NetGrowth,col="red") points(wec$NetGrowth,bg="skyblue",color="red",pch=21) abline(h=mean(wec$NetGrowth),col="blue") title("公眾號日凈增關注人數變化") box()
#5.12 生成時間序列的函數####
ts(1:10, frequency = 4, start = c(1959, 2)) #生成時間序列,季度,起始
print( ts(1:10, frequency = 7, start = c(12, 2)), calendar = TRUE) #星期 日歷 gnp <- ts(cumsum(1 + round(rnorm(100), 2)), start = c(1954, 7), frequency = 12)
z <- ts(matrix(rnorm(300), 100, 3), start = c(1961, 1), frequency = 12)
class(z);head(z);plot(z)
###6.R語言與統計####
###7.循環與自定義函數#### #7.1 for循環####
example("for")
for(i in 1:5)? print(1:i)? ? #循環遍歷每個數,每取出一個數,就打印一個向量
for(n in c(2,5,10,20,50)) {? #循環遍歷向量中的沒一個數 x <- stats::rnorm(n)? ? ? ?#生成含有n個數的正態分布,n是上面循環遍歷的那個數 cat(n,":", sum(x^2),"\n")? #對應每一個數n,計算生成的正態分布數組的平方和 }
f <- factor(sample(letters[1:5], 10, replace = TRUE));f? #抽樣,生成字母序列
for(i in unique(f)) print(i)#依次取出序列中的每一個獨有的值
#7.2 while語句#### a[1]<-1;i<-1
while(a[i]<100){ i=i+1; a[i]<-a[i-1]+3 }
#7.3 自定義函數####
myfun_cv<-function(x){ #函數在R中也是一個對象 cv<-sd(x)/mean(x)? ? #函數的語句體用來計算變異系數 return(cv)? ? ? ? ? ?#函數執行完畢后返回cv值,該值就是變異系數 }
#測試該函數 a<-c(1,2,5,8,9,6)? ? ? #生成一個向量? myfun_cv(a)? ? ? ? ? ? #調用自定義的函數來計算變異系數
#7.4 通過循環和自定義函數來驗證中心極限定理#### myfun<-function(a){ x<-1:100? ? ? ? ? ? ?#先生成一個1到100的序列,后面可以更改這些值,相當于覆蓋掉原來的值 x<-data.frame(x) a<-data.frame(a)
for(i in 1:100){? ? ? ? #設置循環,循環抽取100個樣本,并將計算出來的均值賦值給數據框中的x變量 c<-a[sample(nrow(a),1000),] m=mean(c) x$x[i]<-m }
windows(1280,720);par(mfrow=c(1,2)) plot(density(a$a),main = "這是原來的分布") plot(density(x$x),main = "這是抽取的樣本的均數的分布")? ? }
###7.4 .1正態分布#### a<-rnorm(10000,0,1) myfun(a) ###7.4.2指數分布#### b<-rexp(100000,1) myfun(b) ###7.4.3t分布#### c<-rt(1000,3) myfun(c) ###7.4.4F分布#### d<-rchisq(100000,1) myfun(d)
###8.數據處理####
###8.1把數據框變長####
總結
以上是生活随笔為你收集整理的R语言学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: drupal7 php版本,为内置PHP
- 下一篇: 【SoC FPGA学习】十、SoC FP