我是靠谱客的博主 细心玫瑰,最近开发中收集的这篇文章主要介绍R语言学习笔记(二)--向量,函数,集合向量索引和subset函数数学函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

向量索引和subset函数

向量的名字

> height<-c(155,186,177,169)
> names(height)
NULL
> names(height)<-c('Mary','Jason','Tom','Tina')
> height
Mary Jason
Tom
Tina
155
186
177
169

另一种类似与字典创建的命名方式

> s<-c(Tony=87,Mary=92,Lisa=80,John=78,Victor=93)
> s
Tony
Mary
Lisa
John Victor
87
92
80
78
93

names(height)<-c(‘Mary’,‘Jason’,‘Tom’,‘Tina’)
本质上是调用了一个置换函数'name<-'()

向量索引

需要注意[]内是向量和负数以及逻辑型向量的情况,负数表示排除绝对值下标的索引

> x<-101:108
> x
[1] 101 102 103 104 105 106 107 108
> x[c(3,5,8)]
[1] 103 105 108
> x[-4]
[1] 101 102 103 105 106 107 108
> x[c(-2,-4,-7)]
[1] 101 103 105 106 108
> x[c(F,T,T,F,T,T,F,F)]
[1] 102 103 105 106
> x[x%%2==0]
[1] 102 104 106 108
> x%%2 # 得到一个逻辑型向量
[1] 1 0 1 0 1 0 1 0
> x%%2==0
[1] FALSE
TRUE FALSE
TRUE FALSE
TRUE FALSE
TRUE
> x[c(F,T)]
[1] 102 104 106 108

通过which索引也可以定位到需要的向量:

> which(x%%2==0)
[1] 2 4 6 8
> x[which(x%%2==0)]
[1] 102 104 106 108

直接利用name进行索引

> height
Tony
Mary
Lisa Victor
John
180
166
160
175
172
> height["Mary"]
Mary
166
> height[c("Tony","John")]
Tony John
180
172

利用索引可以单独修改,也可以批量修改

> s[1:4]<-c(80,90)
> s
Tony
Mary
Lisa
John Victor
80
90
80
90
93
> s[-2:-3]<-100
> s
Tony
Mary
Lisa
John Victor
100
90
80
100
100

subset()函数

subset(x,subset) 可以接受向量、列表、矩阵、数量框。
函数的第二个参数subset是一个逻辑型向量。
subset不返回NA

> x<-c(86,70,80,NA,90,NA)
> x[x>=85] #86 NA 90 NA
[1] 86 NA 90 NA
> subset(x,x>=85) #86 90
[1] 86 90

对于其余数据类型:

> y<-list(11:15,21:28,31:36)
> y
[[1]]
[1] 11 12 13 14 15
[[2]]
[1] 21 22 23 24 25 26 27 28
[[3]]
[1] 31 32 33 34 35 36
> subset(y,c(T,F,T)) # 选取第一行和第三行
[[1]]
[1] 11 12 13 14 15
[[2]]
[1] 31 32 33 34 35 36
==========
> m <- matrix(1:12,nrow=3)
> m
[,1] [,2] [,3] [,4]
[1,]
1
4
7
10
[2,]
2
5
8
11
[3,]
3
6
9
12
> subset(m,c(T,F,T))
[,1] [,2] [,3] [,4]
[1,]
1
4
7
10
[2,]
3
6
9
12
==========
> d <- data.frame(c1=1:5,c2=11:15,c3=21:25)
> subset(d,c(T,F,T,F,T))
c1 c2 c3
1
1 11 21
3
3 13 23
5
5 15 25
> subset(d,c2>13)
c1 c2 c3
4
4 14 24
5
5 15 25

数学函数

函数一:

函数作用
abs()绝对值
sqrt()平方根
log()自然对数,也可以给出底数(base=3)
log2()以2为底的对数
log10()以10为底的对数
exp()以自然对数e为底的指数函数
sin() asin()正弦 反正弦
cos() acos()余弦 反余弦
tan() atan()正切 反正切
round()四舍五入,参数digits指定小数位数,.5的数最好加上0.001

函数二:

函数作用
floor()向下取整
ceiling()向上取整
trunc()去掉小数部分得到整数

函数三:

函数作用
factorial()阶乘
choose(n,k)组合数:从n个中选出k个
combn(x,k)列出x个中选出k个的全部组合

排列数:choose(n,k)×factorial(k)

> factorial(5)
[1] 120
> factorial(0:11)
[1]
1
1
2
6
24
120
720
5040
[9]
40320
362880
3628800
39916800
> choose(4,2) #4个中选取2个 
[1] 6
> combn(1:5,3) # 1:5中选取3个的全部组合
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]
1
1
1
1
1
1
2
2
2
3
[2,]
2
2
2
3
3
4
3
3
4
4
[3,]
3
4
5
4
5
5
4
5
5
5
> combn(c("Tony","Lisa","Mary","John"),2) #4个人中选2个
[,1]
[,2]
[,3]
[,4]
[,5]
[,6]
[1,] "Tony" "Tony" "Tony" "Lisa" "Lisa" "Mary"
[2,] "Lisa" "Mary" "John" "Mary" "John" "John"

函数四:

函数作用
sum()求和
prod()全部元素乘积
cumsum()前k个元素累计求和(k=1…n)
cumprod()前k个元素累计乘积(k=1…n)
cummax()前k个元素最大值(k=1…n)
cummin()前k个元素最小值(k=1…n)

!!!
注意理解cum一类函数的意思,最后得出的是数组不是单个数字

> x<-c(5,3,7,2,6)
> cumsum(x)
#前k个元素累计求和(k=1…n)
[1]
5
8 15 17 23
> cumprod(x)
#前k个元素累计求乘积(k=1…n)
[1]
5
15
105
210 1260
> cummin(x)
#求前k个元素中的最大值(k=1…n)
[1] 5 3 3 2 2
> cummax(x)
#求前k个元素中的最小值(k=1…n)
[1] 5 5 7 7 7

简单统计函数

函数作用
max()最大值
min()最小值
range(x)等价于c(min(x),max(x))
which.max()最大数的下标
which.min()最小数的下标
mean()均值
median()中位数
sd()标准差standard deviation
var()方差
summary()对象的概括–均值、中位数、最值、四分位数
fivenum()五数概括:五个数据:最值、四分位数数、中位数

注意range函数、summary和fivenum函数

> x<-sample(11:20,10)
> x
[1] 15 14 17 20 16 11 12 13 18 19
> max(x) # 20 最大值
[1] 20
> min(x) # 11 最小值
[1] 11
> range(x) # 11 20 
[1] 11 20
> which.max(x) #最大数的下标
[1] 4
> which.min(x) #最小数的下标
[1] 6
> summary(x)#对于数组得到的是均值、中位数,最值和四分位数
Min. 1st Qu.
Median
Mean 3rd Qu.
Max.
11.00
13.25
15.50
15.50
17.75
20.00
> fivenum(x)
[1] 11.0 13.0 15.5 18.0 20.0
函数作用
pmin()多个长度相等的向量按元素逐个对比,返回所有向量第k个元素中的最小值
pmax()多个长度相等的向量按元素逐个对比,返回所有向量第k个元素中的最大值

如果向量长度不同,会使用循环补齐,即短的向量循环成和最长的向量一边长
向量可以超过2个!!

> x <- c(11,7,13,6,15)
> y <- c(9,10,12,8,15)
> pmin(x,y)
[1]
9
7 12
6 15
> pmax(x,y)
[1] 11 10 13
8 15
> pmin(x,10)
[1] 10
7 10
6 10
> pmax(x,10)
[1] 11 10 13 10 15

排序函数

函数作用
sort(x)升序或降序排列
order(x)返回使得x升序或降序排序的下标变量

x[order(x)]等效于sort(x)

> x<-c(16,19,14,11,18,12)
> x
[1] 16 19 14 11 18 12
> sort(x) #升序
[1] 11 12 14 16 18 19
> sort(x,decreasing=T) #降序
[1] 19 18 16 14 12 11
> index <- order(x) #升序
> index
[1] 4 6 3 1 5 2
> x[index]
[1] 11 12 14 16 18 19
> x
[1] 16 19 14 11 18 12
> rev(x) #对x中的元素取逆序
[1] 12 18 11 14 19 16

集合运算

函数作用
union(x,y)并集
intersect(x,y)交集
setdiff(x,y)差集,在x中,不在y中
setequal(x,y)集合是否相等
unique(x)去掉重复元素

需要注意的:????

> x <- c(2,5,8,10)
> y <- c(1,2,9,5,7)
> setdiff(x,y) #差集 8 10 在x中不在y中
[1]
8 10
> setdiff(y,x) #差集 1 9 7 在y中不在x中
[1] 1 9 7
> setequal(x,y) #FALSE 判断集合是否相等
[1] FALSE
> setequal(c(3,5,9),c(5,3,9,3)) #TRUE
[1] TRUE
> unique(c(2,2,2,5,7,5,7,7)) # 2 5 7
[1] 2 5 7

判断元素是否在集合中:

函数作用
x %in% set返回逻辑向量,在set中的元素返回T,否则返回F
is.element(x,set)同理返回逻辑向量
match(x,table)返回x中的元素在table中的下标,没有找到返回NA
> set<-c(3,9,5,7,2) #set是自己定义的对象名
> 5 %in% set
[1] TRUE
> x <- c(5,6)
> x %in% set
[1]
TRUE FALSE
> is.element(x,set) #TRUE FALSE
[1]
TRUE FALSE
> # 返回一个和x的长度相同的向量,表示x中与y中
> # 元素相同的元素在y中的位置(没有则返回NA)
> match(x,set) # 3 NA
[1]
3 NA
函数作用
toupper(x)转换成大写字母
tolower(x)转换成小写字母
substring(x,start,end)获取子串
substr(x,start,end)获取子串
strsplit(x,split)切分字符串,split可以是一个字符、子串、正则表达式
noquote(x)打印不带双引号的字符串,得到的是noquote类型的对象
> data <- "10001,Tony,98,82"
> strsplit(data,split=",") #得到一个列表list
[[1]]
[1] "10001" "Tony"
"98"
"82"
> str[[1]] #获取列表的第一个组件
[1] "10001" "Tony"
"98"
"82"
> #分隔符是一个或多个空格
> data <- "10002
Mary
95
78"
> strsplit(data,split=" +") #正则表达式 +表示1或多个
[[1]]
[1] "10002" "Mary"
"95"
"78"
> fruit <- c("Apple","Orange","Banana")
> fruit
[1] "Apple"
"Orange" "Banana"
> noquote(fruit)
[1] Apple
Orange Banana
> fr <- noquote(fruit)
> fr
[1] Apple
Orange Banana
> class(fr) #noquote类的对象
[1] "noquote"

缺失值处理

与缺失值NA运算的结果仍然是缺失值
特例:False&NA的计算结果仍然是False

函数作用
is.na(x)得到逻辑向量,NA得到TRUE
na.omit(x)去掉x【向量、矩阵、数据框】中的NA;向量是去掉NA元素,矩阵和数据库是去掉一整行
na.exclude(x)同上
na.fail(x)x中包含NA时得到错误信息
> NA + 2 # NA
[1] NA
> sum(c(2,6,NA,9)) # NA
[1] NA
> x <- c(3,NA,5,7,NA,9)
> mean(x)
[1] NA
> mean(x,na.rm=T) #参数na.rm
[1] 6
> is.na(x)
[1] FALSE
TRUE FALSE FALSE
TRUE FALSE
> mean(x[!is.na(x)])
[1] 6

去重:

> y <- na.omit(x)
> y
[1] 3 5 7 9
attr(,"na.action")
[1] 2 5
attr(,"class")
[1] "omit"
'''
使显示更直接,把attr去掉
'''
> attr(y,"na.action")<-NULL
> attr(y,"class")<-NULL
> y
[1] 3 5 7 9
---------------------------
> na.exclude(x) #class是exclude
[1] 3 5 7 9
attr(,"na.action")
[1] 2 5
attr(,"class")
[1] "exclude"
---------------------------
> na.fail(x) #Error: 对象里有遺漏值
Error in na.fail.default(x) : 对象里有遺漏值

最后

以上就是细心玫瑰为你收集整理的R语言学习笔记(二)--向量,函数,集合向量索引和subset函数数学函数的全部内容,希望文章能够帮你解决R语言学习笔记(二)--向量,函数,集合向量索引和subset函数数学函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部