[转载]008R语言笔记-常用函数
(2014-12-09 15:35:59)
标签:
转载 |
分类: 文心读书 |
备用
原文地址:008R语言笔记-常用函数作者:青囊道人
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)]

加载中…