从叁开始的R学习之路

补充:
/
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样本

你可能感兴趣的:(从叁开始的R学习之路)