[整理]数据与R

参考资料:统计学——基于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
标准差  1
R的函数定义和其他语言是一样的,主要还是对数据的操作。

猜你喜欢

转载自blog.csdn.net/cccrush/article/details/80043204
今日推荐