加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]008R语言笔记-常用函数

(2014-12-09 15:35:59)
标签:

转载

分类: 文心读书
备用
1. 数学函数
> abs(-4) #绝对值
[1] 4
> sqrt(8) #平方根
[1] 2.828427
> ceiling(3.475) #不小于参数的最小整数
[1] 4
> floor(3.454) # 加值不大于参数的最大整数
[1] 3
> trunc(4.56) # 向0的方向截取参数的整数部分
[1] 4
> round(3.654,digits=2) # 将参数传入为指定位的小数
[1] 3.65
> signif(3.654,digits=2) # 将参数传入为指定有效数字的位数
[1] 3.7
> cos(2);sin(3);tan(3) # 三角函数
[1] -0.4161468
[1] 0.14112
[1] -0.1425465
> acos(0.2);asin(1);atan(0.5) #反三角函数
[1] 1.369438
[1] 1.570796
[1] 0.4636476
> log(10,base=29) # 对10取以29为底的对数,默认为以e为底数的自然对数
[1] 0.6838084
> log10(29) #对29取以10为底的对数
[1] 1.462398
> exp(2.3026) # 指数函数
[1] 10.00015

2. 统计函数
> x<-c(1,2,3,4)
> mean(x) # 平均数
[1] 2.5
> median(x) # 中位数
[1] 2.5
> sd(x) # 标准差
[1] 1.290994
> var(x) # 方差
[1] 1.666667
> mad(x) # 绝对中位数差
[1] 1.4826
> #quantile(x,probs) #求分位数。其中x为待求分位数的数值型向量,pobs为一个由[0,1]之间的概率值组成的数值向量
> quantile(x,c(0.3,0.84)) #求x的30%与85%分位点
30%  84%
1.90 3.52
> range(x) #求值域
[1] 1 4
> sum(x) # 求和
[1] 10
> #diff(x,lag=n) #滞后差分,lag用以指定滞后几项。默认的lag值为1,x<-c(1,5,23,29),diff(x)返回值为c(4,18,6)
> min(x) # 最小值
[1] 1
> max(x) # 最大值
[1] 4
> #scale(x,center=TRUE) #  为数据对象x按列进行中心化(center=TRUE)或标准化(center=TRUE,scale=TRUE)

3. 随机数
> runif(5) #生成5个0到1区间上服从均匀分布的随机数
[1] 0.8132675 0.3017550 0.9351139 0.5861060 0.3154174
> runif(5)
[1] 0.7900796 0.3352367 0.7753607 0.4887368 0.7825064
> runif(5)
[1] 0.09468487 0.34760853 0.15928183 0.28834863 0.49220437
> runif(4)
[1] 0.5847126 0.4995118 0.2263729 0.9712139

> 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) # 生成500个随机数
> mydata<-as.data.frame(mydata)
> names(mydata)<-c("y","x1","x2")
> dim(mydata)
[1] 500   3
> head(mydata,n=10)
y    x1   x2
1   98.8  41.3 3.43
2  244.5 205.2 3.80
3  375.7 186.7 2.51
4  -59.2  11.2 4.71
5  313.0 111.0 3.45
6  288.8 185.1 2.72
7  134.8 165.0 4.39
8  171.7  97.4 3.64
9  167.2 101.0 3.50
10 121.1  94.5 4.10

4. 字符串处理
nchar(x) #统计x中的字符数量
> x<-c("ab","cde","fghij","klm")
> x
[1] "ab"    "cde"   "fghij" "klm"
> nchar(x)
[1] 2 3 5 3

substr(x,start,stop) 提取或替换一个字符向量中的子串,start为起始位置,stop为结束位置
> x<-"abcdef"
> x
[1] "abcdef"
> substr(x,2,4)
[1] "bcd"
> substr(x,2,4)<-"ABCD"
> x
[1] "aABCef"
grep(pattern,x,ignore.case+FALSE,fixed=FALSE):在x中搜索某种模式。若fixed=FALSE,则pattern为一个正则表达式。若fixed=TRUE,则pattern为一个文本字符串,返回值的下标
> grep("A",c("b","A","c"),fixed=TRUE)
[1] 2
sub(pattern,replacement,x,ignore.case=FALSE,fixed=FALSE)
在x中搜索pattern,并以文本replacement将其替换。若fixed=FALSE,则pattern为一个正则表达式。若fixed=TRUE,则pattern为一个文本字符串。
> sub("\s",".","Hello There") #用“.”取代“Hello There”中间的空格
[1] "Hello.There"
注意,"s"是一个用来查找空白的正则表达式;使用"\s"而不用""的原因是,后者是R中的转义字符(参见R语言实战1.3.3节)

strsplit(x, split, fixed=FALSE)
在split处分割字符向量x中的元素。若fixed=FALSE,则pattern为一个正则表达式。若fixed=TRUE,则pattern为一个文本字符串
> y <- strsplit("abc", "") #将字符串abc分割
> y
[[1]]
[1] "a" "b" "c"
paste(…, sep=""):连接字符串,分隔符为sep
> paste("x", 1:3,sep="")
[1] "x1" "x2" "x3"
> paste("x",1:3,sep="M")
[1] "xM1" "xM2" "xM3"
> paste("Today is", date())
[1] "Today is Sat Jan 18 21:39:21 2014"
toupper(x):大写转换
> toupper("abc")
[1] "ABC"
tolower(x)  小写转换
> tolower("ABC")
[1] "abc"

5. 其他函数
1. cut(x, n):将连续型变量x分割为有着n个水平的因子
使用选项ordered_result = TRUE以创建一个有序型因子
2. pretty(x, n)  创建美观的分割点。通过选取n+1个等间距的取整值,将一个连续型变量x分割为n个
区间。绘图中常用
3. cat(... , file ="myfile",append =FALSE):连接...中的对象,并将其输出到屏幕上或文件中(如果声明了一个的话)
> firstname <- c("Jane")
> cat("Hello" ,firstname, "n") #将”Hello”与firstname中的元素用”n”连接
Hello Jane
> name <-"Bob"
> cat("Hello", name, "b.n","Isn' R", "t", "GREAT?n")
Hello Bob.
Isn' R GREAT?

注:R中的转义字符:
n 另起一行
r 回车
t 制表符
b 退格
a 响铃
f 换页符
v 垂直制表
\ 反斜杠
' '
" "

6. 将函数运用于整个数据框或数组
> a<-5
> sqrt(a)
[1] 2.24
> b<-c(1.243,5.654,2.99);b
[1] 1.24 5.65 2.99
> round(b)
[1] 1 6 3
> c<-matrix(runif(12),nrow=3);c
[,1]  [,2]  [,3]  [,4]
[1,] 0.9636 0.216 0.289 0.913
[2,] 0.2068 0.240 0.804 0.353
[3,] 0.0862 0.197 0.378 0.931
> log(c) #对整个矩阵求
[,1]  [,2]   [,3]    [,4]
[1,] -0.0371 -1.53 -1.241 -0.0912
[2,] -1.5762 -1.43 -0.218 -1.0402
[3,] -2.4511 -1.62 -0.972 -0.0710
> mean(c)
[1] 0.465

7. apply()函数,可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上。apply函数的使用格式为:apply(x,MARGIN,FUN,...)
其中,x为数据对象,MARGIN是维度的下标,FUN是由你指定的函数,而...则包括了任何想传
递给FUN的参数。在矩阵或数据框中,MARGIN=1表示行,MARGIN=2表示列。
> mydata<-matrix(rnorm(30),nrow=6);mydata
[,1]    [,2]   [,3]   [,4]   [,5]
[1,] -0.0599  0.9123 -0.611  0.958 -0.523
[2,]  0.0115  1.1236 -1.317  1.811 -1.102
[3,]  0.2691 -0.6035 -2.007 -2.550 -0.880
[4,] -0.5282  0.0553  0.768  1.150 -0.637
[5,] -0.6171 -1.0007  0.406  1.228 -2.106
[6,] -0.2624 -0.7582 -0.832  0.152 -0.646
> apply(mydata,1,mean) #计算每行的均值
[1]  0.135  0.106 -1.154  0.162 -0.418 -0.469
> apply(mydata,2,mean) #计算每列的均值
[1] -0.1978 -0.0452 -0.5989  0.4582 -0.9822
> apply(mydata,2,mean,trim=0.2) #计算每列截尾均值,截尾均值基于中间60%的数据,最高和最低20%的值均被忽略
[1] -0.2097 -0.0985 -0.5885  0.8721 -0.8161

8. 案例分析
options(digits = 2) # 设置小数位数为2位
Student <- c("John Davis","Angela Williams","Bullwikle Moose","David Jones","Janice Markhammer","Cheryl Cushing","Reuven Ytzrhak","Gre Knox","Joel England","Mary Rayburn")
Math <- c(502, 600, 412, 358, 495, 512, 410, 624, 573, 522)
Science <- c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86)
English <- c(23, 22, 18, 15, 20, 28, 15, 30, 27, 18)
roster<- data.frame(Student, Math, Science, English, stringsAsFactors=FALSE) #stringsAsFactors设为FALSE,说明所有的字符不被转为因子格式
z <- scale(roster[,2:4]) # 此处的roster[,2:4]为2,3,4列,分别为Math, Science, English,将roster[,2:4]标准化后给z,z此时为数据框,scale则是对数据进行标准化:数值减去均值,再除以标准差理
score <- apply(z, 1, mean) #apply中的参数1表示为列,1为竖着,与列很相像,
roster <- cbind(roster, score)
y <- quantile(score, c(0.8, 0.6, 0.4, 0.2)) #将score的数值进行分析,取80%,60%,40%,20%的百分位数给y向量
roster$grade[score >= y[1]] <-"A" #大于等于80%分位数
roster$grade[score < y[1] & score >= y[2]]<-"B" #大于等于80%百分位数,小于60%百分位数的分数
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)," ") # 以空格为界把学生姓名拆分为姓氏和名字,name此时是一个列表
lastname <- sapply(name, "[", 2)
firstname <- sapply(name, "[", 1) # name为一数据框,"["在此处为一函数,此函数不常见
roster <- cbind(firstname, lastname, roster[,-1])
roster <- roster[order(lastname, firstname),];roster

# 在分解姓名的时候,用到了firstname <- sapply(name, "[", 1) ,书中的讲解是"["为一函数,经过摸索,此函数的用法如下
# "["(x,n):x为一向量,n为一自然数,最大值小于length(x)
# > ss<-c(1,2,3,4,5);ss #建立向量ss
# [1] 1 2 3 4 5
# > "["(ss,4) #在ss中取第4个元素
# [1] 4
# 在提取lastname与firstname的时候,还可以用以下代码:
# name1<-name #将name复制给name1
# name1<-unlist(name1) #name1为一列表,用unlist()分解列表
# firstname <- name1[seq(from=1,to=19,by=2)] #提取name1中的1,3,5...19个元素给first
# lastname  <- name1[seq(from=2,to=20,by=2)]

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有