#################2-3向量、字符串操作#####################
a<-c(5,2,9,3)
replace(a,2,4)
a[-2]
a[-c(2,3)]
sum(a)
max(a)
range(a)
var(a)
sum((a-mean(a))^2)/(length(a)-1)
sqrt(sum((a-mean(a))^2)/(length(a)-1))
sd(a)
sort(a)
rev(a)
rev(sort(a))
sort(a,decreasing = TRUE)
prod(a)
prod(1:5)

#字符串分割函数:strsplit() 
x<-'2020-1-2'
strsplit(x,'-')
#字符串连接函数:paste()及paste0()  其中paste0函数,默认sep=""是两个函数唯一的区别
a <- c('a', 'b', 'c')
b <- c(1:3)
paste(a,b)
paste(a,b,seq='*')

a <- "Hello"
b <- 'How'
c <- "are you? "
paste(a,b,c)
paste(a,b,c, sep = "-")

x <- c('describe', 'the', 'city','you', 'live', 'in')
paste(x, collapse = ' ')#参数collapse是进行向量内拼接时使用的连接符。

#计算字符串长度:nchar()及length() 
x <- c('abcd', 1379, '偷闲阁', NA)
nchar(x)
nchar(x,type = 'bytes')
nchar(x,keepNA = F)#参数keepNA设为TRUE时,函数返回NA,设为FALSE时,则会将NA转化为字符串进行计算
?length
length(x)

#字符串截取函数:substr()及substring() 
x <- '鞠躬尽瘁,死而后已。'
substr(x,1,4)
substring(x,1,4)
substring(x,1,4) <- '诸葛亮说'#替换字符串的内容
substr(x, 1, 4) <- '诸葛亮说'#替换字符串的内容
x

###################4-5矩阵操作####################
mat<-matrix(c(1:12),nrow = 3,ncol = 4)
mat
dim(mat)
mat*3
mat2<-matrix(c(1:16),nrow = 4,ncol = 4)
mat2
mat%*%mat2
mat3<-matrix(c(1:12),nrow = 3,ncol = 4)
mat%*%mat3
colnames(mat)<-c('序号','语文','英语','数学')
mat
mat[1,2]
mat[2,]
mat[,2]
mat[c(1,2),c(2,3)]
mat
#元素筛选(逻辑判断,which)
mat[,2]>=5
mat[mat[,2]>=5]
mat[mat[,2]>=5,]
which(mat[,4]>=12)
mat[which(mat[,4]>=12),]
#apply(X, MARGIN, FUN, ...)
?apply
mat
mean(mat[,2])
apply(mat,1,mean)
apply(mat,2,mean)
apply(mat,1,sum)

###################6数组####################
arr<-array(c(1:24),dim = c(2,3,4))
arr
arr[1,,]
arr[,2,]
arr[,,1]
sum(arr[1,,])
###################7列表####################
a<-2
b<-'hello 小柯'
c<-c(1:4)
L<-list(a,b,c)
L
#列表索引
L[[2]]
L<-list(a=a,b=b,c=c)
L
L$b
#绑定列表
attach(L)
a
#转化为向量
L<-unlist(L)
L[1]
L
L[2]

L<-list(a=a,b=c(2:8),c=c)
L
lapply(L, sum)#返回一个列表
lapply(L, sum)[[1]]
lapply(L, sum)$a
sapply(L, sum)#返回一个向量或者矩阵
sapply(L, sum)[1]

###################8数据框####################
name<-c('kg','ky','kq')
sex<-c('m','m','f')
age<-c(22,21,24)
mat<-data.frame(name,sex,age)
mat
class(mat)
mat[1,3]
mat$name[2]
mat$score<-c(80:82)
mat
mat[which(mat$score==82),]

mat2<-matrix(c(1:12),nrow = 3)
mat2
mat3<-as.data.frame(mat2)#将矩阵转换为数据框
mat3
colnames(mat3)<-c('v1','v2','v3','v4')
mat3
mat3$v2
#连接:merge()    合并!!!:rbind()列数相同、cbind()行数相同      lapply()、sapply()
mat0<-data.frame(name=name,weight=c(60:62))
mat0
mat
mat0$age<-c(20,23,24)
mat0
mat
merge(mat,mat0,by.x = 'age',by.y = 'age')
attach(mat)
mat
name
mat0
cbind(mat,mat0)
mat<-mat[-c(1,2)]
mat
lapply(mat, sum)
lapply(mat, sum)$age
sapply(mat, sum)
sapply(mat, sum)[1]
lapply(mat, sum)[1]

###################9因子####################
a<-factor(c('A','B','C','A','B'))
a
a<-factor(c('A','B','C','A','B'),levels = c('A','B'))
a
a<-factor(c('A','B','C','A','B'),levels = c('A','B','C'),labels = c('','',''))
a
a<-factor(c('A','B','C','A','B'),exclude = 'A')#剔除水平值
a
colour<-c('G','G','R','Y','G','Y','Y','R','Y')
colour
class(colour)
col<-factor(colour)
col
class(col)
col1<-factor(colour,levels = c('G','R','Y'),labels = c('Green','Red','Yellow'))
col1
col2<-factor(colour,levels = c('G','R','Y'),labels = c('1','2','3'))
col2
class(col2)
as.vector(col2)#转换为向量
class(as.vector(col2))
#有序因子
score<-c('A','B','A','C','B')
score1<-ordered(score,levels = c('C','B','A'))
class(score1)
score1
#cut函数
exam <- c(98, 97, 52, 88, 85, 75, 97, 92, 77, 74, 70, 63, 97, 71, 98, 65, 79, 74, 58, 
          59, 60, 63, 87, 82, 95, 75, 79, 96, 50, 88)
exam1<-cut(exam,breaks = 3)
exam1#区间步长(max(exam)-min(exam))/3
#tapply函数(分组)
gender<- c('f','m','m','m','f')
gender<-factor(gender)
age <- c(12,35,25,12,25)
tapply(age,gender,mean)#!!!顺序不能乱

###################10逻辑运算####################
1>2
2==3
#&、&&、|、||
#不同的是&和|作用在对象的每一个元素上,&&和||只作用在对象第一个元素上。
a<-c(TRUE,FALSE,TRUE)
b<-c(TRUE,FALSE,FALSE)
a&b
a|b
a&&b
a||b
#all:判断所有元素  any:判断存在即可
a<-c(3,2,2)
all(a==2)
any(a==2)
#%in%判断某个元素是否在一个数据集中
1%in%c(1,2,3)
which(2%in%c(1,3,2))

a<-c(1,2,3,1,2)
which(a==1)#下标
posted on 2020-04-18 10:20  晨曦生辉耀匕尖  阅读(1479)  评论(0编辑  收藏  举报