1.初级统计(R_01)
代码语言:javascript
复制x<-(1,2,3,4,5,6)
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
range(x)#返回最小值和最大值
var(x) #方差
sd(x) #标准差
sum(x) #总和
abs(x)#绝对值
sqrt(x)#平方根
log(16,base=2)# >4 计算16的log值,底数为2
exp(x)#计算向量x中每一个元素的指数
round(3.1415,digits=2)#保留2位小数,3.14
signif(3.1415,digits=2)#保留2位有效数字,3.1
prod(2,4,5)#>40 连乘的积
quantile(x,c(0.3,0.8))# 计算x的三分位数和八分位数
length(x) #长度
unique(x) #去重复
duplicated(x) #对应元素是否重复
table(x) #重复值统计
sort(x)#排序
sort(x,decreasing = F)#升序(默认)
sort(x,decreasing = T)#降序
ceiling(x)#返回大于x的最小整数
floor()#返回小于x的最小整数
trunc()#返回整数部分
which.max(c(1,2,3,5,6))#返回最大值所在位置,5
2.有重复的用rep(),有规律的序列用seq(),随机数用rnorm()
代码语言:javascript
复制rep("x",times=3)#>x,x,x
x<-c(1,2,3)
rep(x,each=3)#>1,1,1,2,2,2,3,3,3
rep(x,3)#>1,2,3,1,2,3,1,2,3
rep(x,c(4,2,1))#>1,1,1,1,2,2,3
seq(from=3,to=21,by=3)
seq(from=3,to=21,by=3,length.out=10)#控制输出的元素个数为10
代码语言:javascript
复制通过组合,产生更为复杂的向量。
paste0(rep("x",times=3),1:3)#"x1" "x2" "x3"
3.连接——paste、paste0
代码语言:javascript
复制x = c(1,3,5,6,2)
y = c(3,2,5,1,0)
paste(x,y)#x和y之间有空格
paste(x,y,sep=",")
paste(x,y,sep = "")#消除空格
#paste与paste0的区别
paste0(x,y)#paste0没有sep参数,x和y之间无空格
代码语言:javascript
复制#当两个向量长度不一致
x = c(1,3,5,6,2)
y = c(3,2,5)
x == y #循环补齐:y不断循环(3,2,5,3,2,5)
#利用循环补齐简化代码
paste0(rep("x",3),1:3)#省略times=3
paste0("x",1:3)
paste0("x",seq(2,12,2))#seq(from=2,to=12,by=2)的省略
4.交集 并集 差集
代码语言:javascript
复制intersect(x,y)
union(x,y)
setdiff(x,y)#差集(在x里面有,在y里面没有)
setdiff(y,x)#差集(在y里面有。在x里面没有)
5.%in%
代码语言:javascript
复制x %in% y #x的每个元素在y中存在吗
y %in% x #y的每个元素在x中存在吗
#取交集intersect会去重复,而%in%不会
6.向量筛选(取子集)——[]
代码语言:javascript
复制x <- 8:12
#根据逻辑值取子集
x[x==10]#[]即将TRUE的值挑选出来,FALSE丢弃(x[FALSE,FALSE,TRUE,FALSE,FALSE])
x[x<12]
x[x %in% c(9,13)]
#根据位置取子集
x[4]
x[2:4]#取第2-4个元素
x[c(1,5)]#取第1和第5个元素
x[-4]#去掉第4个元素
x[-(2:4)]#去掉第2到第4个元素
x[x<10]#取x<10的数
#x[x<-2]改为x[x< -2],注意区分赋值号和小于-2
####修改向量中的某个/某些元素:取子集 赋值
x
#改一个元素
x[4] <- 40#将x中的第4个值改为40
#改多个元素
x[c(1,5)] <- c(80,20)#将第1个数改为80,第5个数改为20
g[g %in% s]#向量g中有多少个元素在向量s中存在?将这些元素筛选出来
7.隐式循环——apply(R_04)
代码语言:javascript
复制 apply 处理矩阵或数据框:
#apply(X, MARGIN, FUN, …)
#其中X是数据框/矩阵名;
#MARGIN为1表示行,为2表示列,FUN是函数
test<- iris[1:6,1:4]
apply(test, 2, mean)#求test所有列的平均值
apply(test, 1, sum)#求test所有行的和
7.2.lapply(list, FUN, …) —— 对列表/向量中的每个元素(向量)实施相同的操作
代码语言:javascript
复制test <- list(x = 36:33,y = 32:35,z = 30:27);test#返回值是列表
lapply(test,mean)
lapply(test,fivenum)
#sapply 简化结果,返回矩阵或向量
sapply(test,mean)
sapply(test,fivenum)
8.两个数据框的连接
代码语言:javascript
复制test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),
blood_type = c("A","B","O","AB"))
test1
test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
group = c("group1","group1","group2","group2"),
vision = c(4.2,4.3,4.9,4.5))
test2
library(dplyr)
inner_join(test1,test2,by="name")#交集(两个数据框都有的姓名)
right_join(test1,test2,by="name")#右边说了算,左边表的人留下,无的填充NA
full_join(test1,test2,by="name")#全部
semi_join(test1,test2,by="name")#半连接:左边的表取子集(将右边的表中存在的人留下)
anti_join(test1,test2,by="name")#反连接:左边的表取子集(将右边的表中不存在的人留下)
9.插入值/删除值
代码语言:javascript
复制v<-c(1,2,3,5,6)
append(x=v,values=4,after=3)#在向量v第3个数值后面插入值4
代码语言:javascript
复制v <- v[-c(1:3)]#删除前3个数
10.运算符号(向量元素个数不同时,循环补齐,长的向量元素个数必须是短的整数倍)
代码语言:javascript
复制x**y#幂运算
y%%x#求余
y%/%x#整除运算
11.分组
代码语言:javascript
复制cut(1:100,c(seq(0,100,10))
12.提取字符串(substr/toupper/tolower)
代码语言:javascript
复制> substr(month.name,1,3)
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
> Mon <- substr(month.name,1,3)
> toupper(Mon)#转换为大写
[1] "JAN" "FEB" "MAR" "APR" "MAY" "JUN" "JUL" "AUG" "SEP" "OCT" "NOV" "DEC"
> tolower(Mon)#转换为小写
[1] "jan" "feb" "mar" "apr" "may" "jun" "jul" "aug" "sep" "oct" "nov" "dec"
> gsub("^(\w)", "\U\1",tolower(Mon),perl = TRUE)#将向量Mon中的每一个元素首字母大写
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
> gsub("^(\w)", "\L\1",toupper(Mon),perl = TRUE)#首字母小写,其他大写
[1] "jAN" "fEB" "mAR" "aPR" "mAY" "jUN" "jUL" "aUG" "sEP" "oCT" "nOV" "dEC"
13.查找字符串(grep/match)
代码语言:javascript
复制> x <- c("b","A ","AC")
> grep ("A ",x,fixed=TRUE)#返回值为元素所在位置
[1] 2
> grep ("A ",x,fixed=FALSE)#fixed=FALSE表示支持正则表达式
[1] 2 3
> match("AC",x)#不支持正则表达式
[1] 3
14.取样(sample)
代码语言:javascript
复制x <- 1:100
sample(x,30)#随机取30个数
sample(x,30,replace = T)#可替代(即可重复抽样)
sample(x,60,replace = F)
15.t/rev
代码语言:javascript
复制sractm <- t(mtcars)#翻转数据框的行与列
rev(letters)#向量中各元素翻转
16.scal
代码语言:javascript
复制scale(state.x77,center = T)#中心化
scale(state.x77,scale = T)#标准化
x <- ,center = T)
17.分割字符串 strsplit
代码语言:javascript
复制> path <- "usr/local/bin/R"
> strsplit(path,"/")#返回值为列表
[[1]]
[1] "usr" "local" "bin" "R"
18.修改数据框
代码语言:javascript
复制transform(women, height = height*2.54)
transform(women, cm = height*2.54)#新增一列,列名为cm