Others

ceiling() function returns the smallest integers larger than the parameter. eg: 從iris資料集中選出10%樣本數進行分析 np <- ceiling(0.1 * nrow(iris)) #設定以irsi資料筆數的10%為上限,所以利用ceiling()取出超過樣本數10%的最小整數。the smallest integers not less than ther corresponding elements idx <- sample(1:nrow(iris), np) #進行抽樣 irissample <- iris[idx,] #抽出的樣本

missing value:相關位置被保留且賦予一個NA值。任何NA的計算都是NA;is.na()來判斷,TRUE/FALSE

rep( )函數 rep( [ 指定的向量 ], [使之重複的次數]) rep(1:4, 2) [1] 1, 2, 3, 4, 1, 2, 3, 4 rep(c(1, 3), 4) [1] 1 3 1 3 1 3 1 3 rep(c(1, 3), each=4) [1] 1 1 1 1 3 3 3 3 rep(1:3, rep(2, 3)) # rep(1:3, each=2 2 2) [1] 1 1 2 2 3 3

seq函數 seq(1, 10) [1] 1 2 3 4 5 6 7 8 9 10 seq(1, 10, 2) # seq(from, to, by) [1] 1 3 5 7 9 seq(10, 1, -1) [1] 10 9 8 7 6 5 4 3 2 1 seq(1, by=2, length=10) [1] 1 3 5 7 9 11 13 15 17 19

par(mfrow=c(1,2)) # 讓圖片以1x2的方式呈現

%/% 整數除法 5%/%3=1 %% 求餘數 5%%3=2

sort() # 對向量排序 ver() # 將向量按原方的反方向排序 rank() # 列出向量每個元素的秩/順序 prod() # 求向量連乘積

append(y, 10:15, after=3) # 在y向量第三個元素後插入10-15這些新的元素

文字編碼

匯入 CSV 檔的時候會碰到一種比較特別的問題,就是作業系統編碼不同的問題,Windows 的中文編碼是 big5,而 Linux / Mac 都是 UTF-8,所以在 Linux / Mac 匯入來自於 Windows CSV 檔常常會發生亂碼,那該如何解決此問題,本人的做法是將資料讀進來轉成 UTF-8,在輸出一份 CSV 檔,

当文本编码与系统默认的编码不一致的时候,使用R读入这些字符需要对Encoding参数的正确设置。

readLine("XXXX", encoding="UTF-8")

因為讀取 XML 檔案比較不會發生上述的編碼問題,所以如果兩者都會的話,以後有提供 CSV 與 XML 檔案時,就可以選 XML 檔案以免製造自己的麻煩。 library(XML) # 要先安裝 XML package 再載入。 data <- xmlToDataFrame("Desktop/A_lvr_land_A.XML")

http://programmermagazine.github.io/201311/htm/article6.html 查詢現行環境下的Encoding設定 Sys.getlocale() sessionInfo() 修改現行環境下的Encoding設定 Sys.setlocale() :例如:Sys.setlocale(category='LC_ALL', locale='C')

以特定Encoding載入文字檔 read.table() :例如:myStrVec <- read.table(myFile, ... , encoding='UTF-8') 載入特定檔後轉換Encoding Encoding() :例如:Encoding(myStrVec) <- 'gb2312' iconv() :例如:myURL <- iconv(myStrVec[i], from='UTF-8', to='gb2312') 送出Query URL的Encoding URLencode() :例如:myURL <- URLencode(myURL) 接收Query結果的Encoding getURL() :例如:myRes <- getURL(myURL, ... , .encoding='gb2312') readLines() :例如:myRes <- readLines(myURL, encoding='gb2312') readHTMLTable() :例如:myRes <- readHTMLTable(myRes, encoding='gb2312', which= ...)

資料處理

R和一般程式語言或統計軟體的不同在於進行迴圈運算時,可以使用向量的方式來處理

m <- matrix(data=cbind(rnorm(30, 0), rnorm(30, 2), rnorm(30, 5)), nrow=30, ncol=3)

  1. Apply apply是將一個公式或函數(第三個參數)套用在某個資料集(第一個參數)中的每個元素上,特別的是,可以用第二個參數來指定公式是要依照ROW還是COL來執行。 --當第二個參數是1時,公式by row來執行 apply(m, 1, mean) --當地二個參數是2時,公式by col執行 apply(m, 2, mean)

也可以在apply中定義自己的function: apply(m, 2, function(x) length(x[x<0])) 檢視每一欄中有沒有矩陣(matrix)="" apply(m,="" 2,="" function(x)="" is.matrix(x))="" 要計算小於零的項次="" mean(x[x="">0]))

  1. sapply and lapply sapply和lapply是兩兄弟,都會將公式帶入到輸入檔案的每個元素上,差別在於: sapply吐回一個vactor lapply吐回一個list sapply(1:3, function(x) x^2)

    [1] 1 4 9

    lapply(1:3, function(x) x^2)

    [[1]]

    [1] 1

    #

    [[2]]

    [1] 4

    #

    [[3]]

    [1] 9

    我們也可以透過參數 simplify=FALSE 讓sapply吐回一個list sapply(1:3, function(x) x^2, simplify=F)

或是在lapply裡使用 unlist 參數讓lapply吐回一個vector unlist(lapply(1:3, function(x) x^2))

[1] 1 4 9

回到一開始的DATA,對於一個矩陣,要如何用sapply或lapply計算欄位平均數呢? sapply(1:3, function(x) mean(m[,x])) [1] -0.02664418 1.95812458 4.86857792 我們使用欄位index(1:3)的方式代入到function中,並且使用[,x]的方式來指定針對欄來做計算。 我們可以將上述function中的m,用y來取代,變成一個有兩個變數的function,x部分一樣是第一個參數中的1:3,y在之後再用m來指定代入。 sapply(1:3, function(x, y) mean(y[,x]), y=m)

[1] -0.02664418 1.95812458 4.86857792

3. paste("Happy", "White-Day", sep=" ") # paste():拼貼字串(把 "Happy"" 和 "White Day"" 兩個字串拼貼起來,sep代表連結字串的符號)

append():把兩個vector串接起來

b <- c(1,2,3) c <- c(4,5,6) append(b, c)

sample(x=1:100, size=10) # 從1~100數字中,隨機挑10個數字,產生一個數列(vector) seq(from=1, to=5, by=0.5) # 產生一個「從1開始,每次加0.5,直到5為止」的數列(vector)

order(a, decreasing=TRUE) sort(a, decreasing=TRUE)

unique(a) # 萃取資料中unique的element duplicated(a) # 若後面有重複的資料,函式會回傳TRUE,而第一個資料會是FALSE which() #找出第幾個element是TRUE(在a裡面,第幾個element的值等於100)

results matching ""

    No results matching ""