#说明 文中‘test’均为模拟名称,原始编码为GKB方式
推荐大家使用Rstudio,界面友好

偏统计
###2.Rstudio基本操作####

#2.1查看R语言自带的数据集####
data()

#直接输入数据集的名称,查看这些数据
CO2

#2.2快捷键####
#Ctrl+Enter:运行光标所在行的代码,也可以用来运行鼠标选中区域的代码
#Ctrl+L:清除控制台中的代码
#Ctrl+shift+S:运行代码集中的所有代码
#Ctrl+1:跳转到代码编辑环境
#Ctrl+2:跳转到控制台
#Ctrl+D:删除代码集中光标所在行的代码

#2.3查看数据集的前6行####
head(CO2)

#查看数据集最后的6行
tail(CO2)

#2.4安装包(可以通过命令或者通过图形界面来安装)####
install.packages("ggplot2")

#加载包
library(ggplot2)

#2.5创建向量和矩阵,以及对它们的基本操作####
rm(list = ls())
x1<-c(1,2,3,4,5,6)

x2<-c(2,4,6,8,10,12)
length(x1)

mode(x1)

class(x1)

C<-rbind(x1,x2);C

cbind(x1,x2)           # column vector

Dmat<-cbind(x1,x2)       
class(Dmat)                 #矩阵

Dmat3<-rbind(x1,x2)         
class(Dmat3)          #matrix

Dframe<-as.data.frame(cbind(x1,x2))   #data.frame
class(Dframe)

Dmat;Dframe          #矩阵和数据框格式是不一样的,矩阵是由行列组成的,数据框是由记录和变量组成的


a<-c(1:100)               #total :100 numbers

length(a)
a
b <- cbind(a);b  #矩阵 是 列优先 排列 的


#2.6常用的函数####
b<-c(1:20)

mean(b)

sum(b)

max(b)

min(b)

sd(b)               # standard deviation

#产生向量
1:5

1:5*2

1:5*2+1

#2.8查看内存中已有的对象####
ls()

#删除当前内存中的所有对象
rm(list = ls())

ls()

#2.9访问向量中的元素####
a<-1:5*2-1

a

a[3]               #  3th

a[-3]               #except 3th

a[2:4]              #second  to  4th

a[-(2:4)]          #except(sec  to  4th)

a[1,2,3]    #不能这样访问向量中的元素

a[c(1,2,3)]            #right  way compared with Row127

a[a<=5]

a[a<=3 | a>=7]             #not consecutive,use |
 
a[a>=3 & a<=7]           #  consecutive ,use  &


#2.10 seq()函数和rep()函数,用来产生等差数列的函数,调用示例函数####
example("seq")
demo(lm.glm,package = 'stats',ask = T) #Demonstrations of R Functionality
help(lm.glm)
seq(0, 1, length.out = 11)

seq(stats::rnorm(20))

seq(1, 9, by = 2)

seq(1, 9, by = pi)

seq(1, 6, by = 3)

seq(1.575, 5.125, by = 0.05)

seq(17)

example("rep")

rep(c("a","b","c"),each=4)

rep(c("a","b","c"),4)

#2.11 产生字母序列####
letters[1:30]

#2.12 which()函数####
a<-rnorm(10)
a

which.max(a)   #位置

a[which.max(a)]

which(a==a[which.max(a)])

which(a>0)

a[which(a>0)]

#2.13 排序函数####
a<-1:10
a

rev(a)        #反转顺序

a<-c(3,1,5,6,9,2,7,4,6,5)

sort(a)          #  make   a from small to big  (sorting)

rev(sort(a))    #   reverse sort a

#2.14 生成矩阵####
a<-c(1:36)

a1<-matrix(a,nrow = 9,ncol = 4);a1

a2<-matrix(a,nrow = 4,ncol = 9);a2

a3<-matrix(a,nrow = 9,ncol = 4,byrow = TRUE);a3

dim(a1)           #dim函数用来查看矩阵的维度

dim(a2)[1]        #行

dim(a3)[2]        #列
#矩阵运算

##解方程 
#解方阵
x1<-c(4,2,-1,1)
x2<-c(3,-1,21,1)
x3<-c(11,3,1,1)
x4<-c(1,1,1,1)
b<-c(2,10,-8,1);b
A<-as.matrix(rbind(x1,x2,x3,x4));A
solve(A,b)
#一元高次。a+bx+cx^2=0,  c(a,b,c)
polyroot(c(4,-4,1))
svd(A)  #奇异值分解

cor(x1,x2,method = c("spearman"))
options()  # 设置小数点位数等paramater
x <- t(A) %*% A  #矩阵A的转置成A
x/5
cov(A)
t(a1)

a1+a2

a1+a3


#2.15 改变Rstudio的工作界面(通过tools里面的layout设置完成)####

#2.16 设定工作目录,方便载入数据.将数据存放在设定的目录中,载入数据时就不用指定路径了####
setwd("~")
setwd("~")
#!!or  ctrl+5, click ‘ ...’ ,choose object file ,click  ‘more’ >>set as working directory

getwd()   #用于知道当前工作目录

#2.17 help()函数 ####
help("seq")
?seq
help(package="ggplot2")  #获取对整个包的帮助文件

#2.18 example()函数 ####
example("seq")
example("plot")
example("hist")

#搜索自己需要的函数
help.search("multivariate normal")

#2.19 数据框。dataframe####
##数据框就是一个数据表格,一行表示一个记录,一列表示一个变量

x1<-c(1,2,3,4,5,6,7,8,9)
x2<-c(2,4,6,8,10,12,14,16,18)
x <-data.frame(x1,x2);x

x=data.frame('重量'=x1,'运费'=x2);x
#or
names(x) <- c('重量','运费');x

x$"费率" <- x$运费/x$重量 #数据框可以利用已有的变量产生新的变量并存储于当前数据框中 

names(x)     #查看数据框中的变量

str(x)       #查看数据框中数据的定义

#我们在载入数据后,要使用上面的两个函数来检查数据载入是否成功,并检查数据的定义



###2.20 列表 list()####
x1<-1                    #单个数字,其实是一个只有一个元素的一维向量

x2<-c(1,2,3,4)           #有四个元素的一维向量

x3<-c("a","bc","d")      #字符向量

x4<-matrix(1:36,nrow = 9,ncol = 4)   #矩阵,vector

x5<-data.frame(a=c(1,2,3,4),b=c(2,3,4,5),c=c(3,4,5,6))

list_01<-list(x1=x1,x2=x2,x3=x3,x4=x4,x5=x5)        #产生一个数据框

list_01$x3
###3.数据导入与导出####

#3.1 先把R内置的CO2数据集导出,然后再练习导入操作####
write.table(CO2,file = "二氧化碳.txt")
write.csv(CO2,file = "二氧化碳.csv")

#3.2 导入逗号分割的文本文件####
read.table(file = "二氧化碳.txt",header = TRUE)

#最好给指定一个名称#
carbon<-read.table(file = "二氧化碳.txt",header = TRUE)

#3.3 导入csv格式的数据####
carbon_csv<-read.csv(file = "二氧化碳.csv",header = TRUE)

#3.4 通过剪贴板读入数据并写入文件####
setwd("~")
clipboard<-read.table("clipboard",header = TRUE)  #  often-used!!
clipboard

write.table(clipboard,file = "clipboard.txt")


#3.5 导入空格分割的文本文件数据####
setwd("~")
data <- CO2
write.table(data,'test.txt')
co2<-read.table(file = "test.txt",header = TRUE)
names(co2);str(co2)

#3.5.1 读取数据框中的变量####

#1)很多函数中有data参数,可以指定数据框,然后在函数内部直接访问数据框中的变量
co2$conc<-as.factor(co2$conc)  #variable must be numeric
boxplot(uptake~conc,data = co2)  #boxplot(y ~ grp) ,grp usually a factor
#2)使用美元符号$
boxplot(co2$uptake~co2$conc)
#3)使用attach函数,不推荐使用,很容易出错,特别是在同一个R代码集中写很多不同程序的时候
attach(co2)
boxplot(co2~year)
detach(co2)
###3.6 数据子集操作####

#1)先明确分类变量有几个类别
unique(co2$Plant)
#2)选择数据子集
co2_15<-co2[co2$Plant=='Mc1',]
#3)多个条件用逻辑连接符号进行连接
co2_1501<-co2[co2$Plant=='Mc3'&co2$uptake==17.9,]
co2_1501
#4)排序操作

#,这个排序可能没有实际意义,这里只是演示操作的方便

orderuptake<-co2[order(co2$uptake),]   #对行的操作
View(orderuptake)

#5)合并数据子集

#(1)先读入数据
co2<-read.table(file = "test.txt",header = TRUE)
#or
co2<-read.table("clipboard",header = TRUE)         #通过剪贴板读入数据
#(2)然后进行合并
#假设plant是人名,我们要将另一个带有人名的数据合并
name <- co2$Plant;name
x    <- c(rnorm(84,0,1)) #生成84个随机正态数列
co3  <- data.frame(name,x)
tem  <- merge(co2,co3,by.x = 'Plant',by.y = 'name' )


#3.7 读入Excel格式的文件####
#install.packages("RODBC")   #注意有些包只在特定版本中能够运行,更新问题
#library(RODBC)
#xls<-odbcConnectExcel("mvstats4.xls")

co2<-read.table("clipboard",header = TRUE)        #有行名列名
library("readxl")
co3 <- read_excel('test.xls')    #只有行名 或者  只有列名