补充:
/
除
x%%y
求余,5%%2结果为1
x%/%y
整数除法,5%/%2结果为2
- 计算均值
mean()
- 计算中位数
median()
- 计算标准差
sd()
- 计算方差
var()
- 计算两个变量之间的相关系数
cor(number,log(number))
- 计算两个变量之间的协方差
cov(number,log(number))
1.修改表格的列名
方法一:names(data)[1]<-'可爱的'
,这里的data
是表格的名称,[1]
是指第1列。
方法二:用reshape包中的函数修改
rename(data,c(oldname='newname'))
其中c()
里面可以一直添加。
install.packages('reshape')
library(reshape)
data<-rename(data,c(cyl='passion',disp='marathon'))
data
data
2.组合数据
paste
v1<-c(10,20,30)
v2<-'g'
paste(v1,v2,sep='')
分隔符sep=''
里可以加,``.
都可以。
paste('a1',1:20,sep='_')
3.
rbind(df1,df2)
行合并 row
cbind(df1,df2)
列合并 column
将两个表格合并
4.将两个表格通过共有的ID组合起来,比如学号。用
merge
函数
df<-merge(df1,df2,by='ID')
5.apply
函数
对矩阵matrix使用函数,形式是apply(x,MARGIN,sum)
,MARGIN=1
表示对行使用函数,MARGIN=2
表示对列使用函数。这里的sum
就是相加的函数,也可以用平均值函数mean
,也可以是自定义函数f1<-function(x){x*100}
,把数据扩大100倍。
m1<-matrix(1:20,nrow=4)
m1
apply(m1,MARGIN=1,sum)
apply(m1,MARGIN,f1)
也可以对数组使用apply
函数
先建立一个数组
xname<-c('x1','x2')
yname<-c('y1','y2','y3')
zname<-c('z1','z2','z3','z4')
a1<-array(1:24,c(2,3,4),dimnames=list(xname,yname,zname))
a1
求和,分别对一维、二维、三维求和
apply(a1,1,sum)
apply(a1,2,sum)
apply(a1,3,sum)
6.lapply
函数
对列表中的各个元素使用函数,lapply(x,FUN,...)
l1<-list(v<-1:10,m<-matrix(1:20,4))
l1
lapply(l1,sum)
还有sapply
函数,lapply输出的是列表list,sapply输出的是向量。
7.
分组计算
数据表
- 想知道男女各自的收入总和(income是想知道的,性别是分组)
- 想知道不同性别不同学历的人群的平均收入(两个分组)
tapply(df1$income,df1$sex,sum)
tapply(df1$income,list(df1$sex,df1$education),mean)
by(df1$income,list(df1$sex,df1$education),mean)
aggregate(income~sex+education,df1,sum)
更喜欢aggregate
三种抽样方法
- 在R中使用统计学中的抽样
1.随机抽样
函数是sample(x,size,replace=FALSE)
这里x
是指总体量,size
是抽取的样本量,replace=FALSE
代表是不放回的抽取
data<-read.csv('data.csv')
data<-data[order(data$专业,data$ID),] #排序
nrow(data) #查看总行数
index <- sample(1:nrow(data),60) #抽取样本行数
index
sampledata<-data[index,]
sampledata
2.分层抽样
用sampling包中的strata函数:strata(data,statanames=,size,method=)
用上图中的性别分层抽样,先抽50个人为一组,剩下的为一组。
data <- rbind(matrix(rep('male',60),nrow=60,ncol=1,byrow=TRUE),
matrix(rep('female',40),nrow=40,ncol=1,byrow=TRUE))
data
data2 <- cbind.data.frame(data,c(rep(1,60),rep(2,40)),100*runif(100))
data2
names(data2)=c('gender','number','income')
data2
index_50 <- strata(data2,stratanames = 'gender',size=c(30,20),
method='srswor',description = TRUE)
index_50
data3 <- data2[index_50$ID_unit,]
data3
组1样本