R語言第一戰之數據結構初體驗
- 首先是我讀《R語言實戰》書時遇到的一些困惑和案例:
1、dir.create()函數案例
dir.create()
這個函數一次只能建立一個目錄,不能同時建立子目錄。
比如你想建立這個目錄C:/myprojects/project1/,myprojects和project1都不存在,應該這麼寫:
> dir.create("C:/myprojects/")> dir.create("C:/myprojects/project1/") #不直接寫這句,會提示錯誤的
最後「/」正斜杠可以沒有。
2、數組下標為負值或小數時會顯示什麼?
#姓名name<-c(猴子,李同,王五,張三)#向量長度length(name)#通過在方括弧中給定元素所處位置的數值name[1]-------------以下為運行後顯示代碼------------name[1]=猴子> name[0] character(0) #為0時顯示是字元串為0> name[-1.1][1] "李同" "王五" "張三" #name[-1.1]就是刪除第一個數據後顯示> name[-1][1] "李同" "王五" "張三" #name[-1]同上> name[-2][1] "猴子" "王五" "張三" #name[-2]就是刪除第二個數據後顯示> name[-3][1] "猴子" "李同" "張三" #name[-3]就是刪除第三個數據後顯示> name[-4][1] "猴子" "李同" "王五" #name[-4]就是刪除第四個數據後顯示
總結為當數組的下標為正值時按照順序顯示數組元素;當數組下標為0時則顯示數組元素的數據類型,如字元串,整數;當數組下標為負值時則先刪除數組內負值的絕對值順序的元素,再顯示數組,實際數組存儲的內容不變,變的只是顯示;當數組下標為小數時則捨去小數點後數字。
3、向量是一維數組只有一個下標;矩陣是二維數組有兩個下標;數組是三維數組有三個下標;數據框包含了列向量,可以是不同模式(類型)的列向量;列表包含上述所有類型。
4、data.frame()
參數設置stringsAsFactors
邏輯:應將字元向量轉換為因子? 「factory-fresh」默認值為TRUE,但可以通過設置選項(stringsAsFactors = FALSE)來更改。(谷歌翻譯)
因子的理解參考這篇文章由男人和女人想到的分類問題,很形象的解釋,通俗易懂。
5、#查找「1型糖尿病」的病人?
type1<-patientdata[patientdata$diabetes=="1型糖尿病",]
"1型糖尿病"後面的逗號一定要有,不然查找出來的結果不對。
6、刪除數據框內的數據
patientdata=patientdata[-1,] #這個就代表,刪除了patientdata數據集中第一行數據 patientdata=patientdata[,-1] #這個就代表,刪除了patientdata數據集中第一列數據
7、c(2,3,4)到底表達的是什麼意思?
> dim1 <- c("A1", "A2") > dim2 <- c("B1", "B2", "B3") > dim3 <- c("C1", "C2", "C3", "C4") > z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3)) > z, , C1 B1 B2 B3A1 1 3 5A2 2 4 6, , C2 B1 B2 B3A1 7 9 11A2 8 10 12, , C3 B1 B2 B3A1 13 15 17A2 14 16 18, , C4 B1 B2 B3A1 19 21 23A2 20 22 24
先看數組的定義:myarray <- array(vector, dimensions, dimnames)
其中vector包含了數組中的數據,dimensions是一個數值型向量,給出了各個維度下標的最大值,而dimnames是可選的、各維度名稱標籤的列表。dimensions就是c(2,3,4),也就是說每個維度下最大的數據應該是多少,有且只能等於前面定義好的dim1、dim2、dim3的長度,大於或小於都不能正確定義數組。
長度定義錯誤的報錯狀態:
> z <- array(1:24, c(4, 3, 4), dimnames=list(dim1, dim2, dim3)) Error in array(1:24, c(4, 3, 4), dimnames = list(dim1, dim2, dim3)) : length of dimnames [1] not equal to array extent
翻譯就是:「dimnames」的長度[1](這個1指的就是dim1,如果僅dim2長度不對就顯示[2])不等於數組範圍。
8、第一個畫圖的函數參數解釋
#定義4行*1列矩陣#矩陣的數據:病人年齡age<-c(30,20,35,40);#行名:病人姓名rnames<-c(猴子,李同,王五,張三);#列名:病人年齡cnames<-c("age");a<-matrix(age, nrow = 4,ncol = 1, byrow = TRUE, dimnames = list(rnames,cnames))#繪製柱狀圖barplot(a[,"age"], main = "病人年齡分布", ylab="姓名", col=c("lightblue"), border = NA, cex.lab=1.5, las=2 )
通過定義矩陣a匯總相應需要繪圖的數據,然後barplot()函數來繪圖,函數說明如下:
barplot(height, width = 1, space = NULL, names.arg = NULL, legend.text = NULL, beside = FALSE, horiz = FALSE, density = NULL, angle = 45, col = NULL, border = par("fg"), main = NULL, sub = NULL, xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL, xpd = TRUE, log = "", axes = TRUE, axisnames = TRUE, cex.axis = par("cex.axis"), cex.names = par("cex.axis"), inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0, add = FALSE, args.legend = NULL, ...)
height取的年齡的數值,main是圖的標題,ylab是y軸的標籤,col是條形或條形組件的顏色向量,取的是淺藍色,border是顏色可用於條形的邊界,使用border = NA省略邊框,cex.lab為相對於當前的cex設置,放大坐標軸標題1.5倍,las設置坐標標記顯示方向。= 0(預設):平行於坐標軸;= 1:平行於x軸;= 2:垂直於坐標 軸;= 3:平行於y軸。
由此可見barplot函數很多參數,應該很強大,而且後期使用是比較頻繁的一個繪圖函數。
雖然學的是計算機,但是長期不編程,不寫代碼,手都生疏了,很多原理也早就拋到腦後了,翻了好幾天的《R語言實戰》的第一章和第二章,看著好像都懂,可是實際自己寫起代碼都不明白。後來在大數據群里請教了一下,猴子老師說先看他的講課,說的淺顯易懂些,按照講課的案例自己一個代碼代碼的敲,終於弄明白了很多知識點,然後回過頭來看書,發現猴子老師的講課比書中的講解更明白些,容易理解,我想我算是數據分析入門了。同時也惡補了下英語,這個也是屬於長期不用,用進廢退的功能,遇到不會的單詞馬上查了學習讀音和意思。
第二關的目的就是學會安裝R環境和Rstudio,了解基本的軟體操作和R的各種數據類型,能簡單的定義相關向量並完成入門級的分析和繪圖。
體會最深的就是「紙上得來終覺淺,絕知此事要躬行。」不能光看書,實踐才是最主要的。看了下很多R語言內容跟我以前學的C語言有觸類旁通的感覺,可能在叫法和格式上有所不同,我更加堅定努力學下去的信心了,目前我處於熱身狀態,逐步進入到數據分析的海洋里了。自己給自己鼓勵,努力!加油!不要輕易放棄學習!
推薦閱讀:
※小鳥的live——畫畫與編程
※大家閱讀過的編程經典書籍有哪些?
※為什麼在編程相關的技術論壇里,很多人答非所問?
※在優達學城(Udacity)上做 reviewer 是一種怎樣的體驗?
※什麼類型的編程比較好玩, 遊戲編程、服務端開發…… ?