資料科學

[資料科學] R語言初學雜筆

最近開始學起了R語言。R語言和一般的程式語言有很大的不一樣,學起來跟當初剛學JS一樣,挺費力的。於是做這篇筆記,把最近兩個禮拜R語言的體會記錄下來。

資料型態

vector:

vector內的所有資料形態必須要一致。分別有以下三種型態numerical, character, logical。

使用c()函式進行指定賦值。

使用names()給予名稱。

matrix:

y<-matrix(1:20, nrow=5,ncol=4)

cells <- c(1,26,24,68)
rowname <- c("R1", "R2")
colname <- c("C1", "C2")
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE,
    dimnames=list(rowname, colname))

x[,4] #第四行
x[3,] # 第三列
x[2:4,1:3] # 第2~3列,1~3行

rbind() cbind() 也可以用來建立matrix。

除此之外,一些基本的矩陣運算R也都有支援:

t()、diag()、solve()、eigen()分別是transpose、對角化、反矩陣、求eigenvalue eigenvector。

array:

類似vector的概念,只是有加上dim()維度的概念,所以array裡面也都要放相同type的。另外,我們可以使用cbind()和rbind()來把vector合併成一個array。只是我目前還沒用過這個,也不是很懂這個的用途XD

list:

list和array是很不一樣的概念。list 是裝著一堆R物件的向量。所以list裡面可以放任何東西,這點和matrix、array、vector很不一樣。

# a string, a numeric vector, a matrix, and a scaler
w <- list(name="Fred", mynumbers=a, mymatrix=y, age=5.3)

# example of a list containing two lists
v <- c(list1,list2)

#取值方式
mylist[[2]] # 2nd component of the list
mylist[["mynumbers"]] # component named mynumbers in list

Factors:

factors主要是拿來做分類的,譬如:

as.factor(vec)
[1] 14 15  16  18 19
Levels: 14  15  16  18  19  
# levels 表示 vec 有5種不同的分類

data frame:

data frame和matrix最大的不同是,每一行都可以有不同的資料型態。然後我們也可以用names()來給他起名字。data frame的底層其實是用很多的list構成的,也就是一個column一個list。以下是一些code example

d <- c(1,2,3,4)
e <- c("red", "white", "red", NA)
f <- c(TRUE,TRUE,TRUE,FALSE)
mydata <- data.frame(d,e,f)
names(mydata) <- c("ID","Color","Passed") # variable names

myframe[3:5] # columns 3,4,5 of data frame
myframe[c("ID","Age")] # columns ID and Age from data frame
myframe$X1 # variable x1 in the data frame

注意,我們可以用$來refer一個column。

程式碼來源

讀檔

getwd():顯示目前R所在的路徑,我的是家目錄。

setwd():設定目前的路徑,如果要讀某個目錄下大量的資料,就把目錄設到那裡去。

read.csv()、read.table():讀取資料表,read.csv() 裡面是包一個 read.table()的wrapper函數。

除了上面這些函式以外,還有讀各種檔案的例如json、xml、hdf5的。個人是覺得用到的時候再查一下就好了。

常用函式

剛剛發現這邊有整理一份很簡單扼要的常用函式。

http://garrettgman.github.io/distributions/

以下是我常用的,有可能會和上面重複:

paste(…, sep="",collapse=NULL):用來串接字串,私心認為javascript的+真的是方便許多了XD。sep和collapse的差別看這篇

library():用來引入某個library。

print():印東西

mean()、sd()、min()、max()、quantile():平均、標準差、最大值,最小值、百分位數

as.numeric(),as.character(),as.logical():轉型

apply()系列(apply、lapply、sapply、tapply、mapply):apply的感覺很像functional programming。這篇解釋的蠻清楚的。這篇是中文的。

cor()、cov()、var():用來算correlation covariance variance的,wiki

return():從函式中跳出。

data frame 常用函式(當然這裡面也有部分的函式可以用在其它的type)

head()、tail():用來取frame的前幾筆或後幾筆,預設是6筆。

summary():看一下data frame的一些訊息。

nrow()、ncol():取得行數、列數

na.omit():消除含有NA的欄和列

which():參數放判斷條件,用來判定該取哪些行或列。

dplyr、tidyr

因為R原生的data frame操件有那麼一點複雜,所以就有人開發了這個套件,可以快速的進行各種data frame的tidy工作。data tidy的精神我放在下一篇。

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s