learnR_advanceddataprocessing_6

learnR_advanceddataprocessing_6

1. 数学函数
abs(x)                          #绝对值
sqrt(x)                         #平方根 ----> x ^ 0.5  or  x ** 0.5
ceiling(x)                      #不小于x的最小整数, eg: ceiling(3.475)---->4
floor(x)                        #不大于x的最大整数, eg: floor(3.475)---->3
trunc(x)                        #向0的方向截取x的整数部分, eg: trunc(5.99)----->5
round(x, digits=n)              #将x四舍五入为指定小数位, eg: round(3.475, 2)---->3.48
signif(x, digits=n)             #将x四舍五入为指定有效数字位, eg: signif(3.475, 2)---->3.5

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)                          #自然对数, e=exp(1)=2.718282,数学形式:ln(x)
log(x, exp(1))
log10(x)                        #常用对数,数学形式:lg(x)
log2(x)                         #二进制对数,数学形式:lb(1024)=10
exp(x)                          #指数函数,e^x, eg: e^2.3036 = 10.00015

2. 统计函数
mean(x)                         #平均数
mean(x, trim= 0.05, na.rm=T)    #截尾平均数,丢弃最大5%和最小5%的数据
meadian(x)                      #中位数
sd(x)                           #标准差,具体计算公式
var(x)                          #方差,具体计算公式
mad(x)                          #绝对中位差
quantile(x, probs)              #分位数 eg: quantile(x, c(0.25,0.5,0.75))
range(x)                        #求值域
sum(x)                          #求和
diff(x, lag=n)                  #滞后分差
min(x)                          #最小值
max(x)                          #最大值
scale(x, center=T, scale=T)     #将x按列进行标准化

#数据标准化
newdata <- scale(mydata)        #对矩阵或数据框的指定列进行均值为0,标准差为1的标准化
newdata <- scale(mydata)*SD+M   #.....................均值为M,标准差为SD ..........

3. 概率函数
d = dnorm   #密度函数           #returns the height of the probability density function
p = pnorm   #分布函数           #returns the cumulative density function
q = qnorm   #分位数函数          #returns the inverse cumulative density function(quantiles)
r = rnorm   #随机数生成函数        #returns randomly generated numbers

#概率分布
beta            #Beta分布
binom           #二项分布
caughy          #珂西分布
chisq           #(非中心)卡方分布
exp             #指数分布
f               #F分布
gamma           #Gamma分布
geom            #几何分布
hyper           #超几何分布
lnorm           #对数正态分布
logis           #Logistic分布
multinom        #多项分布
nbinom          #负二项分布
norm            #正态分布
pois            #泊松分布
signrank        #Wilcoxon符号秩分布
t               #t分布
unif            #均匀分布
weibull         #Weibull分布
wilcox          #Wilcoxon秩和分布

3.1 正态分布函数
x <- pretty(c(-3,3), 30)
y <- dnorm(x)
plot(x, y, type='l', xlab='NormalDeviate', ylab='Density', yaxs='i')
a.位于z=1.96左侧的正态曲线下方面积是多少?
pnorm(1.96) --> 0.975
b.均值为500,标准差为100的正态分布的0.9分位点的值是多少?
qnorm(0.9, mean=500, sd=100) --> 628.16
c.生成50个均值为50,标准差为10的正态随机数。
rnorm(50, mean=50, sd=10)

3.2 服从正态分布的伪随机数
set.seed(1234)  #设定种子,方便重现结果
runif(5)        #均匀分布函数

3.3 生成多元正态数据
library(MASS)
mvrnorm(n, mean, sigma)#n是自己想要的样本大小,mean为均值向量,sigma为方差-协方差矩阵

eg:
library(MASS)
options(digits=3)#规定数据精确度
set.seed(1234)
mean <- c(230.7, 146.7, 3.6)#均值向量
sigma <- matrix(c(15360.8, 6721.2, -47.1,
                    6721.2, 4700.9, -16.5,
                     -47.1,  -16.5,   0.3), nrow=3, ncol=3)#方差-协方差矩阵
mydata <- mvrnorm(500, mean, sigma)#生成多元正态数据
mydata <-as.data.frame(mydata)
names(mydata) <- c('y', 'x1', 'x2')
dim(mydata)#维度
head(mydata, 10)

4. 字符处理函数
nchar(x)#字符串个数
length(x)#对象长度

substr(x, strat, stop)#用位置匹配字符串

#以下函数,默认fixed=FALSE为模糊匹配,pattern为正则表达式或文本字符串
#若fixed=TRUE,则为精确匹配,pattern只能是文本字符串
txt <- c('allen@qq.com', 'qq@qq', 'qq@gmail.com')

grep(pattern, x)#用字符串匹配位置
y1 <- grep('([a-zA-Z]+)@', txt)
y2 <- grep('qq', txt)

sub(pattern, replacement, x)#替换
y1 <- sub('([a-zA-z]+)@', 'loveR@', txt)
y2 <- sub('qq', 'R', txt)#替换匹配的所有项中,子项的第一个

strsplit(x, pattern)#分割
y1 <- strsplit(txt[1], '(\\W)+')#匹配 非字母非数字非下划线 字符
y2 <- strsplit(txt[1], '@')

paste(x1, x2, sep='')#拼接
toupper(x)#大写转换
tolower(x)#小写转换

5. 正则表达式

##############################

##############################

##############################

6. 类序列函数(自拟名称)
seq(from, to, by)       #序列 a <- 1:10
rep(x, n)               #将x重复n次
cut(x, n)               #将连续型变量x分割为n个水平的因子
pretty(x, n)            #创建美观分割点。将连续型变量x分为n个区间
cat('s1','s2',...)      #连接s1,s2等字符串并打印在屏幕,不能赋值
eg:
\n  #新行
\t  #制表符
\b  #退格,非空格,一般后面追加标点符号连用。

7. apply, sapply函数
#apply应用在数组的某个维度上,sapply应用在list上。
#sapply是lapply更好用的版本。

apply(x, margin, func)#margin=1表示行,margin=2表示列。
eg:
mydata <- matrix(rnorm(30), nrow=6)
apply(mydata, 1, mean)
apply(mydata, 2, mean, trim=0.2)

sapply(x, func, simplify=TRUE)#默认情况
sapply(x, func, simplify='array')#
eg:
student <- c('Cheryl Cushing','John Knox','David Jones')
name <- strsplit(student, ' ')#空格,而不是NA
last_name <- sapply(name, '[', 2)
first_name <- sapply(name, '[', 1)
name_table <- cbind(first_name, last_name)

8. 控制流
statement:语句,是一条单独的R语句或一组复合语句,使用分号分隔。
cond:条件,是一条最终被解析为真或假的表达式。
expr:表达式,是一条数值或字符串的求值语句。
seq:序列,是一个数值或字符串序列。

8.1 循环
for (var in seq) statement
eg: for (i in 1:10) {print('hia~')}

while (cond) statement
eg: i<-0; while (i>10) {print('ha~'); i<-i+1}
#R中循环可能比较低消费时,建议联用R中的内建数值或字符处理函数和apply族函数。

8.2 条件执行
if (cond) statement_1 else statement_2
eg:
if (!is.character(aa)) {aa<-as.factor(aa)} else {print('already')}

ifelse(cond, statement_1, statement_2)
#行为二元且i/o为向量时,请使用ifelse()。
eg:
outcome <- ifelse(score > 0.5, 'Passed', 'Failed')

switch(expr, ...)
eg:
feelings <- c('sad', 'afraid')
for (i in feelins){
    print(
        switch(i,
            happy  = 'I am glad you are happy',
            afraid = 'There is nothing to fear',
            sad    = 'Cheer up',
            angry  = 'Calm down now'
        )
    )
}

8.3 错误捕获
try(expr, silent=F)
tryCatch(expr, ..., finally)
eg:
tryCatch(expr, error = function(e) e)#保证程序的运行

9. 自编函数
my_func <- function(arg1, arg2, ...){
    statements
    return(object)
}
####################################################################
eg1:    #一个描述性统计量计算函数
#用来计算数据对象的集中趋势和离散情况。
my_stats <- function(x, parametric=TRUE){
    if (parametric) {
        center <- mean(x); spread <- sd(x)
        cat('Mean=', center, '\n', 'SD=', spread, '\n')
    } else {
        center <- median(x); spread <- mad(x)
        cat('Median=', center, '\n', 'MAD=', spread, '\n')
    }

    result <- list(center=center, spread=spread)
    return(result)
}

set.seed(1234)
x <- rnorm(500)
y1 <- my_stats(x)
y2 <- my_stats(x,F)

##################################
eg2:    #switch 日期格式输出变换
my_data <- function(type='long'){
    switch(type,
        long  = format(Sys.time(), '%A %B %d %Y'),
        short = format(Sys.time(), '%m-%d-%y'),
        cat(type, 'is not recognized type \n')
    )
}

my_data('long')
my_data('short')
my_data('medium')
####################################################################
10. 整合与重构
10.1 转置
eg:
cars <- mtcars[1:5, 1:4]
t(cars)

10.2 整合
aggregate(x, by, func)
#x是待折叠的对象;
#by是一个或多个变量名组成的列表,这些变量将被去掉以形成新的观测;
#func是用来计算描述性统计量的标量函数,它将被用来计算新观测中的值。
eg:
options(digits=3)
agg_data<- aggregate(mtcars, by=list(mtcars$cyl, mtcars$gear), mean, na.rm=T)
#by=list(new_cyl=mtcars$cyl, new_gear=mtcars$gear)#重命名

10.3 reshape2
library(reshape2)
my_data <- data.frame(ID=c(1,1,2,2),Time=c(1,2,1,2),X1=c(5,3,6,2),X2=c(6,5,1,4))

10.3.1 融合(宽数据-->长数据)
md <- melt(my_data, id = c('ID', 'Time'))
#宽数据:一般情况
#长数据:多用于ggplot2,plyr,lm()...

10.3.2 重铸(长数据-->宽数据)
newdata <- dcast(md, formula, func)
#dcast()    返回数据框
#acast()    返回向量,数组,矩阵
new_data1 <- dcast(md, ID+Time ~ variable)#ID+variable~Time亦可
new_data2 <- dcast(md, ID+Time ~ variable, mean)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值