R語言高階資料管理
阿新 • • 發佈:2018-11-19
數學函式
函式 | 描述 |
---|---|
abs(x) | 絕對值 |
sqrt(x) | 平方根 |
ceiling(x) | 不小於x的最小整數 |
floor(x) | 不大於x的最大整數 |
trunc(x) | 向0方向擷取整數部分 |
round(x,digits=n) | 將x取為指定n位小數的數值, round(3.475, digits=2)返回值為 3.48 |
signif(x,digits=n) | 將x取為指定n位有效位的數值 |
cos(x)、sin(x)、tan(x) | 餘弦、正弦和正切 |
acos(x)、asin(x)、atan(x) | 反餘弦、反正弦和反正切 |
cosh(x)、sinh(x)、tanh(x) | 雙曲餘弦、雙曲正弦和雙曲正切 |
acosh(x)、asinh(x)、atanh(x) | 反雙曲餘弦、反雙曲正弦和反雙曲正切 |
log(x,base=n) |
以n為底的x的對數值 |
log(x) log10(x) |
自然對數 常用對數 |
exp(x) |
指數函式 |
統計函式
函式 | 描述 |
---|---|
mean() | 平均值 |
median() | 中位數 |
std() | 標準差 |
var() | 方差 |
mad() | 絕對中位差 |
quantile() | 分位數 |
range() | 值域 |
sum() | 求和 |
diff() | 滯後差分,lag 用以指定滯後幾項。預設的 lag 值為 1x<- c(1, 5, 23, 29) diff(x)返回值為 c(4, 18, 6) |
min() | 最小值 |
max() | 最大值 |
scale(x,center=TRUE, scale=TRUE) |
為資料物件 x 按列進行中心化(center=TRUE)或標準化(center=TRUE,scale=TRUE) |
概率函式
在R中,概率函式形如 :[dpqr]distribution_abbreviation()
其中第一個字母表示其所指分佈的某一方面:
- d = 密度函式(density)
- p = 分佈函式(distribution function)
- q = 分位數函式(quantile function)
- r = 生成隨機數(隨機偏差)
生成隨機種子
函式set.seed()。
生成多元正態資料
MASS包的mvrnorm()函式。
mvrnorm(n,mean,sigma)
其中n為樣本的大小,mean為均值,sigma為方差--協方差矩陣(或相關矩陣)。
字元處理函式
其他實用函式
將函式應用到矩陣和資料框
R中提供了一個apply()函式,可將一個任意函式“應用”到矩陣、陣列、資料框的任何維 度上。
apply()函式的使用格式為:
apply(x, MARGIN, FUN, ...)
例項:一個數據問題的解決
問題:將學生的各科考試成績組合為單一的成績衡量指標,基於相對名次 (前20%、下20%、等等)給出從A到F的評分,根據學生姓氏和名字的首字母對花名冊進行排序。
options(digits = 2) #小數點保留兩位
#構建資料
Student <- c("John Davis", "Angela Williams", "Bullwinkle Moose",
"David Jones", "Janice Markhammer", "Cheryl Cushing",
"Reuven Ytzrhak", "Greg Knox", "Joel England",
"Mary Rayburn")
Math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)
Science <- c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86)
English <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)
roster <- data.frame(Student, Math, Science, English,
stringsAsFactors=FALSE)
#計算綜合得分
z <- scale(roster[,2:4]) #標準化進行統一量綱
score <- apply(z, 1, mean)
roster <- cbind(roster, score)
#對學生進行評分
y <- quantile(score, c(.8,.6,.4,.2))
roster$grade[score >= y[1]] <- "A"
roster$grade[score < y[1] & score >= y[2]] <- "B"
roster$grade[score < y[2] & score >= y[3]] <- "C"
roster$grade[score < y[3] & score >= y[4]] <- "D"
roster$grade[score < y[4]] <- "F"
#抽取姓氏和名字
name <- strsplit((roster$Student)," ") #以空格為界將姓名拆分為姓氏和名
Lastname <- sapply(name, "[", 2)
Firstname <- sapply(name, "[", 1) #提取列表中每個成分的第一個元素,放入一個儲存名字 的向量Firstname
roster <- cbind(Firstname,Lastname, roster[,-1])
#按姓氏進行排序
roster <- roster[order(Lastname,Firstname),]
roster
**************************************************************
Firstname Lastname Math Science English score grade
6 Cheryl Cushing 512 85 28 0.35 C
1 John Davis 502 95 25 0.56 B
9 Joel England 573 89 27 0.70 B
4 David Jones 358 82 15 -1.16 F
8 Greg Knox 625 95 30 1.34 A
5 Janice Markhammer 495 75 20 -0.63 D
3 Bullwinkle Moose 412 80 18 -0.86 D
10 Mary Rayburn 522 86 18 -0.18 C
2 Angela Williams 600 99 22 0.92 A
7 Reuven Ytzrhak 410 80 15 -1.05 F