#################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)#下标