R 語言筆記
記錄一下今天用 R 撰寫因為統計需要的 scripts 遇到的問題。(雖然這些計算用 python 不消幾分鐘的事情... lol)
1. 常用指令:
getwd(), setwd(), source() ...
2. 對於預設路徑的解決方法。由於直接開起 RGui 的話,預設路徑皆為 "C:\USERS\..."
替代方法:
1. 將 RGUI.EXE的路徑加入環境變數
2. 使用 CMD CONSOLE, 在指定路徑下執行 RGUI.EXE
3. 讀取 CSV:
read.csv("FILENAME")
4. 讀取某個column:
若column name 簡單的話(像是 User, Quality, amount)
ex. df#[COLUMN_NAME]
或是透過涵式 colnames(df) 取得
ex. colnames(df)
5. 檢查是否有 NA 值:
is.na(df$QUALITY)
*另外函數像 sum, max, mean都有參數可以讓 user 自動避掉 NA 值。(避掉而非刪除)
ex. sum(QUALITY, na.rm=TRUE)
6. 針對 large size 的檔案讀取, 用一般 read.csv 或 read.table 效率極差。
INPUT (csv file) [輸入格式分別是 USER, ITEMID, RANKING, ...] (一共1015065個 items, 檔案 4.2MB)
OUTPUT
7. 產生 random integer matrix
ex. matrix(sample(10, 5,10), nrow=3, ncol=5)
8. 計算 standard deviation, mean by column
ex. apply(mydata, 2, sd); apply(mydata, 2, mean)
*注意: 2表示 column, 1表示 row
1. 常用指令:
getwd(), setwd(), source() ...
2. 對於預設路徑的解決方法。由於直接開起 RGui 的話,預設路徑皆為 "C:\USERS\..."
替代方法:
1. 將 RGUI.EXE的路徑加入環境變數
2. 使用 CMD CONSOLE, 在指定路徑下執行 RGUI.EXE
3. 讀取 CSV:
read.csv("FILENAME")
4. 讀取某個column:
若column name 簡單的話(像是 User, Quality, amount)
ex. df#[COLUMN_NAME]
或是透過涵式 colnames(df) 取得
ex. colnames(df)
5. 檢查是否有 NA 值:
is.na(df$QUALITY)
*另外函數像 sum, max, mean都有參數可以讓 user 自動避掉 NA 值。(避掉而非刪除)
ex. sum(QUALITY, na.rm=TRUE)
6. 針對 large size 的檔案讀取, 用一般 read.csv 或 read.table 效率極差。
myline <- scan("rawdata.csv", sep=",") # cost 2.6(s)
rm <- matrix(myline, length(myline)/3, 3, byrow=TRUE, )
dimnames(rm) <- list(NULL, c("user", "mid", "rank"))
class(rm) <- "numeric"
dfrm <- as.data.frame(rm) #若不作 matrix to dataframe 轉換, cast 會出錯
library(reshape)
mdata <- cast(dfrm, username~movieid, mean) # cost 46.66(s)
INPUT (csv file) [輸入格式分別是 USER, ITEMID, RANKING, ...] (一共1015065個 items, 檔案 4.2MB)
1 | 3342 | 5.0 |
1 | 3294 | 4.5 |
X | XXX | X.X |
N | 23 | 3.5 |
OUTPUT
USER | 3242 | 3294 | XXX | 23 |
---|---|---|---|---|
1 | 5.0 | 4.5 | ? | ? |
X | ? | ? | X.X | ? |
N | ? | ? | ? | 3.5 |
7. 產生 random integer matrix
ex. matrix(sample(10, 5,10), nrow=3, ncol=5)
8. 計算 standard deviation, mean by column
ex. apply(mydata, 2, sd); apply(mydata, 2, mean)
*注意: 2表示 column, 1表示 row
Comments
Post a Comment