天天看點

R語言學習筆記(一)資料結構

使用軟體:RStudio, RGUI

R的資料類型:

- 數值型Numeric,如100,0,-4.335

- 字元型Character,如“China”

- 邏輯性Logical,如TRUE,FALSE

- 複數型,如2+3i

- 因子型,表示不同類别

- 特殊類型:NA(缺失值),NULL(空),NaN(非數值),Inf和-Inf(正無窮和負無窮)

樣例代碼:

age <- c(1,3,5,2,11,9,3,9,12,3)
weights <- c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1)
print(mean(weights))
print(sd(weights))
print(cor(age, weights))
plot(age, weights)           

R不提供多行注釋或塊注釋功能,但可以用if(FALSE){. .. }實作代碼的注釋

幫助函數

if(FALSE){打開幫助文檔首頁}
help.start()
if(FALSE){檢視函數mean的幫助}
help("mean")
?mean
if(FALSE){以mean為關鍵字搜尋幫助文檔}
help.search("mean")
??mean
if(FALSE){函數mean的使用示例}
example("mean")
if(FALSE){列出目前已加載包中所含的所有可用示例資料集}
data()           

目錄操作

if(FALSE){檢視目前目錄}
getwd()
if(FALSE){修改目前的工作目錄為mydirectory}
setwd("mydirectory")
if(FALSE){列出目前工作空間中的對象}
ls()
if(FALSE){移除(删除)一個或多個對象}
rm("x")
if(FALSE){退出R}
q()           

包的操作

if(FALSE){安裝包}
install.packages("gclus")
if(FALSE){載入包}
library(gclus)
if(FALSE){包的簡短描述}
help(package="gclus")           

R的資料結構:标量、向量(Vector)、矩陣(Matrix)、數組(Array)、資料框(Data Frame)和清單(List)。

按次元與内容的同質性可分為:

次元 均一(所有内容為同一類型) 非均一
一維 Vector 向量 List 清單
二維 Matrix 矩陣 Data Frame 資料框
三維 Array 數組

标量、向量

if(FALSE){标量的建立}
a <- 3
if(FALSE){向量的建立1}
a <- c(1,2,3,4,5)
a <- c("China", "USA", "Japan")
a <- c(FALSE, TRUE, FALSE, TRUE)
if(FALSE){向量的建立2,使用:,a=[1]  1  2  3  4  5  6  7  8  9 10}
a <- 1:10
if(FALSE){向量的建立3,使用seq()函數生成序列,a=[1] 1 3 5 7 9}
a <- seq(1,9,2)
if(FALSE){向量的建立4,使用rep()函數,生成重複序列,a=[1] 2 2 2}
a <- rep(2,3)
if(FALSE){向量的通路,下标從1開始}
a <- c(1,2,3,4,5,6,7)
a[3]
a[c(1,3,5)]
a[2:6]
a[which(a>2)]           

矩陣

if(FALSE){矩陣的使用,其中vector包含了矩陣的元素,nrow和ncol用以指定行和列的維數,dimnames包含了可選的、以字元型向量表示的行名和列名。選項byrow則表明矩陣應當按行填充(byrow=TRUE)還是按
列填充(byrow=FALSE),預設情況下按列填充。}
mymatrix <- matrix(vector, nrow=num_of_rows, ncol=num_of_cols, byrow=logical_value, dimnames=list(char_vector_rownames,char_vector_colnames))
if(FALSE){矩陣的建立1}
y <- matrix(1:20, nrow=5, ncol=4)
if(FALSE){矩陣的建立2}
cells <- c(1,26,24,68)
rnames <- c("R1","R2")
cnames <- c("C1","C2")
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE, dimnames = list(rnames, cnames))
if(FALSE){矩陣的建立3,按列排列}
x <- c(1:12)
dim(x) = c(3,4)
if(FALSE){矩陣的通路}
x <- matrix(1:20, nrow=4)
print(x[2,])
print(x[,2])
print(x[2,2])
print(x[3,c(4,5)])           

數組

if(FALSE){數組的使用,vector包含了數組中的資料,dimensions是一個數值型向量,給出了各個次元下标的最大值,而dimnames是可選的、各次元名稱标簽的清單}
myarray <- array(vector, dimensions, dimnames)
if(FALSE){數組的建立}
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))
if(FALSE){數組的通路}
z[,,3]
z[,2,3]
z[1,2,3]           

資料框

if(FALSE){資料框的使用,列向量col1, col2, col3,… 可為任何類型(如字元型、數值型或邏輯型)。每一列的名稱可由函數names指定,每一列的資料類型必須相同。}
if(FALSE){DataFrame是R語言中最常用的資料結構}
mydata <- data.frame(col1, col2, col3)
if(FALSE){資料框的建立}
patientID <- c(1,2,3,4)
age <- c(25,34,28,52)
diabetes <- c("Type1","Type2","Type1","Type1")
status <- c("Poor","Improved","Excellent","Poor")
patientdata <- data.frame(patientID, age, diabetes, status)
if(FALSE){資料框的通路}
patientdata[1:2]
patientdata[c("age","status")]
patientdata$age
if(FALSE){因子的使用}
patientID <- c(1,2,3,4)
age <- c(25,34,28,52)
diabetes <- c("Type1","Type2","Type1","Type1")
diabetes <- factor(diabetes)
status <- c("Poor","Improved","Excellent","Poor")
status <- factor(status, order=TRUE)
patientdata <- data.frame(patientID, age, diabetes, status)
summary(patientdata)           

清單

if(FALSE){清單的使用,清單(list)是R的資料類型中最為複雜的一種。一般來說,清單就是一些對象(或成分,component)的有序集合。清單允許你整合若幹(可能無關的)對象到單個對象名下。}
mylist <- list(object1,object2,...)
if(FALSE){清單的建立}
g <- "My First List"
h <- c(25,26,18,39)
j <- matrix(1:10, nrow=5)
k <- c("one","two","three","four")
mylist <- list(title=g, age=h, j, k)
if(FALSE){清單的通路}
mylist$age
mylist[[3]]           

繼續閱讀