1. 程式人生 > >R語言高階資料管理

R語言高階資料管理

數學函式

函式 描述
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