参考资料:统计学——基于R(第二版)/贾俊平著
录入数据
> #以向量形式录入数据 > names <- c("张青松","王宇翔","田思雨","徐丽娜","张志杰","赵颖颖","王智强","宋丽媛","袁芳芳","张建国") > stat <- c(68,23,57,87,90,34,67,54,90,98) > math <- c(76,34,79,98,78,68,60,90,87,77) > mark <- c(98,67,56,89,86,65,45,89,78,76) > mana <- c(65,45,89,78,99,89,78,67,67,77) > acco <- c(98,78,88,99,89,76,34,67,45,43) > #将向量形式的数据组织成数据框形式 > table1_1 <- data.frame(学生姓名=names,统计学=stat,数学=math,营销学=mark,管理学=mana,会计学=acco) > View(table1_1)
> #将向量形式的数据组织成矩阵形式 > matrix1_1 <- matrix(cbind(stat,math,mark,mana,acco),ncol=5) #按列合并并存储在matrix1_1中 > dimnames(matrix1_1) <- list(c("张青松","王宇翔","田思雨","徐丽娜","张志杰","赵颖颖","王智强","宋丽媛","袁芳芳","张建国"),c("统计学","数学","营销学","管理学","会计学")) > setwd("C:/data") > save(matrix1_1,file="table_test.RData")
数据编辑:
对话框直接编辑:edit()函数
也可用packages:reshape、reshape2(据说是reshape的进阶版)
研究了半天才会安装包QAQ 还没有看怎么用QAQ
数据框列名修改:函数
colnames()
colnames(mytable)<-c("name","subject","value")
数据框行名修改:函数
row.names()
初始化date.frame的时候,有参数row.names可以设置行名的向量。
reshape包的rename函数也可直接用于修改
> library(reshape) > mytable<-rename(mytable,c(name="names"))
注意赋值一定要是向量
缺失值的处理:
检查是否存在缺失值:is.na()
缺失值对数据的运算和函数使用产生影响,需要剔除
> sum(mydata1,na.rm=TRUE) [1] 1521.3 > sum(mydata1) [1] NA
剔除含缺失值所有的行:函数 na.omit()
数据类型的转换:
将数据框转换为矩阵:as.matrix()
matrix1_1<-as.matrix(table1_1[,2:6])
将矩阵转换为数据框:
as.data.frame()
table1_1<-as.data.frame(matrix1_1)将数据框转化为向量: as.vector()
生成随机数:
在相对应的分布函数前加上字母"r"
常用函数:
rnorm(n,mean=0,sd=1):标准正态
runif(n,min=0,max=1):均匀分布
rexp(n):指数分布
rchisq(n,df,ncp=0):卡方分布
> rnorm(5,mean=0,sd=1) [1] -0.7766753 -0.5956605 -1.7259798 -0.9025845 -0.5590619
每次运行rnorm()都会产生一组不同的随机数,想要每次运行都产生一组相同的随机数,可设定种子函数
set.seed()
> set.seed(2) > rnorm(5,mean=0,sd=1) [1] -0.89691455 0.18484918 1.58784533 -1.13037567 -0.08025176 > rnorm(5,mean=0,sd=1) [1] 0.1324203 0.7079547 -0.2396980 1.9844739 -0.1387870 > set.seed(2) > rnorm(5,mean=0,sd=1) [1] -0.89691455 0.18484918 1.58784533 -1.13037567 -0.08025176
数据抽样与筛选:
随机抽样:sample()
> sample(mytable$name,8,replace=FALSE) #无放回随机抽样 > sample(mytable$name,8,replace=TRUE) #有放回随机抽样
数据筛选:sample()
> sample(mytable$name[mytable$value>90])
编写R函数:
> myfun<-function(x){ + n<-length(x) + mean<-sum(x)/n + median<-median(x) + r<-max(x)-min(x) + s<-sd(x) + summ<-data.frame(c(mean,median,r,s)) + row.names(summ)<-c("平均值","中位数","极差","标准差") + names(summ)<-"值" + return(summ) + } > myfun(c(1,2,3)) 值 平均值 2 中位数 2 极差 2 标准差 1R的函数定义和其他语言是一样的,主要还是对数据的操作。