概述
向量索引和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函数数学函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复