date()-再次回到系统当下的日子和岁月,R 入门 iMooc 数据类型 函数

1.多少对象

1.1结构

  • vector。具有同等类其余数据的会见,默认为列向量。Factor也是特种向量。
  • matrix。协会六个具有相同档次的向量。列为变量(实例),行为观测(因子)
  • array数组。多张二维表的聚众
  • dataframe.与矩阵类似,但是储存类型不同的变量。
  • list列表。六个向量、矩阵、数组、数据库的会合。用于将有关总计分析结果“打包”

图片 1

tags: R 入门 iMooc 数据类型 函数

1、基本数据类型(numeric,logical,character,NA,double,complex,integer)

1.2向量

#查看对象结构
str()
#管理对象
ls()
rm()
remove()

  向量的创制

X<-c(1,1,1)
length(X)
Y<-c(2,2,2)
temp<-c(14.7,18.5,25.9)
RH<-c(66,73,41)
wind<-c(2.7,8.5,3.6)
rain<-c(0,0,0)
area<-rain
month<-c("aug","aug","aug")
day<-rep("fri",each=3)
rank<-seq(from=1,to=3,by=1)
str(month)
str(rank)
ls()

  

rep(begin:end,each=repeat times)#每个值重复多少次
rep(begin:end,times=repeat times)#向量重复多少次
seq(from=,to=,by=)

seq(from=,to=,length=)

vector(length=)#包含多少元素

2、日期变量

  访问向量

1.访问指定地点的因素

向量名[位置变量]
向量名[位置变量1:位置变量2]
向量名[c(位置变量列表)]

  

> a<-vector(length=10)
> a
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> a[1]<-1
> a[2:4]<-c(2,3,4)
> a
 [1] 1 2 3 4 0 0 0 0 0 0
> b<-seq(from=5,to=9,by=1)
> a[c(5:9,10)]<-c(b,10)#访问5~9和第10个向量,并赋值5~10
> a
 [1]  1  2  3  4  5  6  7  8  9 10

  

2.采纳职务向量访问指定地点的元素

向量名[位置向量名]

  

> b<-(2:4)
> a[b]
[1] 2 3 4
> b<-c(TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE)
> a[b]
[1] 1 4

  

3.做客指定地方外的要素

向量名[-位置变量]
向量名[-(位置变量1:位置变量2)]
向量名[-c(位置变量列表)]
向量名[-位置变量名]

  

> a[-(2:4)]
[1]  1  5  6  7  8  9 10
> a[-c(5:9,10)]
[1] 1 2 3 4
> b<-(2:4)
> a[-b]
[1]  1  5  6  7  8  9 10

  

这是在 imooc
慕课网上听课做的一些情节。近日看来分外尚未逻辑。感觉上和matlab挺像,可是部分数据类型如故不曾什么概念。

常用函数

1.3矩阵

联合三个向量

#合并列向量
cbind(向量名列表)
#显示列数
dim(矩阵名)
#命名
colnames()
colnames(矩阵名[,列位置常量1:2])
rownames()
rownames(矩阵名[行位置常量1:2,])

  

> ForeData<-cbind(X,Y,temp,RH,wind,rain,area,rank)
> dim(ForeData)
[1] 3 8
> ForeData
     X Y temp RH wind rain area rank
[1,] 1 2 14.7 66  2.7    0    0    1
[2,] 1 2 18.5 73  8.5    0    0    2
[3,] 1 2 25.9 41  3.6    0    0    3
> str(ForeData)
 num [1:3, 1:8] 1 1 1 2 2 2 14.7 18.5 25.9 66 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:8] "X" "Y" "temp" "RH" ...
> colnames(ForeData)
[1] "X"    "Y"    "temp" "RH"   "wind" "rain" "area" "rank"
> colnames(ForeData[,3:5])
[1] "temp" "RH"   "wind"
> rownames(ForeData)<-c("1","2","3")
> rownames(ForeData[c(1,3),])
[1] "1" "3"
> is.matrix(ForeData)
[1] TRUE

  

a<-(1:9)
b<-(1:3)
c<-(1:2)
cbind(a,b)
cbind(a,b,c)
rbind(a,b)#行合并
rm(a,b,c)

 

2.万一matrix中的数据已经存在于某个向量中,则足以将此向量按一定措施派生为矩阵

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
       dimnames = list(rownames,colnames))

  

> a<-(1:30)
> dim1<-c("R1","R2","R3","R4","R5")
> dim2<-c("C1","C2","C3","C4","C5","C6")
> a<-matrix(a,nrow=5,ncol=6,byrow=FALSE,dimnames=list(dim1,dim2))
> a
   C1 C2 C3 C4 C5 C6
R1  1  6 11 16 21 26
R2  2  7 12 17 22 27
R3  3  8 13 18 23 28
R4  4  9 14 19 24 29
R5  5 10 15 20 25 30

  访问矩阵中的元素

1.点名地方上的元素

矩阵名[行位置常量,列位置常量]
矩阵名{行位置常量1:行位置常量2,列位置常量1:列位置常量2】
矩阵名[c(行位置常量列表),c(列位置常量列表)]

 

> ForeData
  X Y temp RH wind rain area rank
1 1 2 14.7 66  2.7    0    0    1
2 1 2 18.5 73  8.5    0    0    2
3 1 2 25.9 41  3.6    0    0    3
> ForeData[2,3]
[1] 18.5
> ForeData[1:2,1:3]
  X Y temp
1 1 2 14.7
2 1 2 18.5
> a<-(1:2)
> ForeData[a,c(1,3)]
  X temp
1 1 14.7
2 1 18.5
> ForeData[c(1,3),]
  X Y temp RH wind rain area rank
1 1 2 14.7 66  2.7    0    0    1
3 1 2 25.9 41  3.6    0    0    3

  2.使用编辑窗口访问元素

fix(ForeData)

  

 

 

图片 2

 

矩阵总计

1.合并

(m1<-matrix(1,nrow=2,ncol=2))
(m2<-matrix(2,nrow=2,ncol=2))
(mm1<-cbind(m1,m2))
(mm2<-rbind(m1,m2))

  

2.乘法

%*%

(mm3<-mm1%*%mm2)
(mm3<-mm2%*%mm1)

  

3.创立对角矩阵

> diag(8)  #创建8乘8的单位阵
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    0    0    0    0    0    0    0
[2,]    0    1    0    0    0    0    0    0
[3,]    0    0    1    0    0    0    0    0
[4,]    0    0    0    1    0    0    0    0
[5,]    0    0    0    0    1    0    0    0
[6,]    0    0    0    0    0    1    0    0
[7,]    0    0    0    0    0    0    1    0
[8,]    0    0    0    0    0    0    0    1
> diag(c(1,2,3,4)) 
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    2    0    0
[3,]    0    0    3    0
[4,]    0    0    0    4
> diag(c(1,2,3,4),nrow=3,ncol=4)
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    2    0    0
[3,]    0    0    3    0

  

4.转置&逆

t()
solve()
eigen()#特征向量与特征值

  

1. 数据类型

查阅数据x类型:class(x)
字符(character), 它们平常被引号包围
逻辑类型(logic),TRUE,FALSE和NA,全体大写
复数(complex),1+2i
数值型(numeric),可以是整数要么小鼠
平头(integer),在数字背后加上大写的L
列表(list) S 对象的向量
因子(factor) 常用于标记样本

Sys.Date()-再次来到系统当下的日子,Sys.time()-重回系统当下的日期和时间,date()-重返系统当下的日子和岁月,

1.3数组

array(data = NA, dim = length(data), dimnames = list(维名称列表))

  

a<-(1:60)
dim1<-c("R1","R2","R3","R4")
dim2<-c("C1","C2","C3","C4","C5")
dim3<-c("T1","T2","T3")
a<-array(a,c(4,5,3),dimnames=list(dim1,dim2,dim3))
>a
, , T1

   C1 C2 C3 C4 C5
R1  1  5  9 13 17
R2  2  6 10 14 18
R3  3  7 11 15 19
R4  4  8 12 16 20

, , T2

   C1 C2 C3 C4 C5
R1 21 25 29 33 37
R2 22 26 30 34 38
R3 23 27 31 35 39
R4 24 28 32 36 40

, , T3

   C1 C2 C3 C4 C5
R1 41 45 49 53 57
R2 42 46 50 54 58
R3 43 47 51 55 59
R4 44 48 52 56 60

> a[1:3,c(1,3),]#所有表格1~3行,1、3列的元素
, , T1

   C1 C3
R1  1  9
R2  2 10
R3  3 11

, , T2

   C1 C3
R1 21 29
R2 22 30
R3 23 31

, , T3

   C1 C3
R1 41 49
R2 42 50
R3 43 51

  

1.1逻辑向量

>, <, >=, <=,
不等:!=
相等:==
交集(and):&
并集(or):|

as.Date()-将字符串格局的日期值转换为日期变量,as.Date(x,format=””,…)

1.4dataframe

1.2 字符型

字符向量也可以用c()拼接

as.POSIXllt()-将字符串转化为带有时间及时区的日期变量,as.POSIXllt(x,tz=””,format)

创建

data.frame(域名1=向量名1,域名2=向量名2,...)
names(数据框名)

  

> ForeDataFrm<-data.frame(FX=X,FY=Y,Fmonth=month,Fday=day,Ftemp=temp,FRH=RH,Fwind=wind,Frain=rain,Farea=area)
> ForeDataFrm
  FX FY Fmonth Fday Ftemp FRH Fwind Frain Farea
1  1  2    aug  fri  14.7  66   2.7     0     0
2  1  2    aug  fri  18.5  73   8.5     0     0
3  1  2    aug  fri  25.9  41   3.6     0     0
> names(ForeDataFrm)
[1] "FX"     "FY"     "Fmonth" "Fday"   "Ftemp"  "FRH"    "Fwind" 
[8] "Frain"  "Farea" 

> str(ForeDataFrm)
'data.frame':   3 obs. of  9 variables:
 $ FX    : num  1 1 1
 $ FY    : num  2 2 2
 $ Fmonth: Factor w/ 1 level "aug": 1 1 1
 $ Fday  : Factor w/ 1 level "fri": 1 1 1
 $ Ftemp : num  14.7 18.5 25.9
 $ FRH   : num  66 73 41
 $ Fwind : num  2.7 8.5 3.6
 $ Frain : num  0 0 0
 $ Farea : num  0 0 0

  若创制数量框时髦未有数量与之对应:

> a<-data.frame(x1=numeric(0),x2=character(0),x3=logical(0))
> str(a)
'data.frame':   0 obs. of  3 variables:
 $ x1: num 
 $ x2: Factor w/ 0 levels: 
 $ x3: logi 
> fix(a)

1.3 发生体系

  • rep(a, times = value),重排。
  • seq(from = value, to = value, by = value, length = value).
    例如,seq(1,10,2),从1开始,步长为2,到10,结果是[1,3,5,7,9]

strptime()-将字符串变量转换为含有时间的日子变量,strptime(x,format,tz=””)

  访问

1.数据框名$域名
2.数据框名[["域名"]]
3.数据框名[[域编号]]
4.
attach(数据框名)
访问域名函数1
访问域名函数2
...
detach(数据框名)

with(数据框名,{域访问函数1,...})#不可以修改域中的数据

数据框名<-within(数据框名,{域访问函数1,...})

  

> ForeDataFrm
  FX FY Fmonth Fday Ftemp FRH Fwind Frain Farea
1  1  2    aug  fri  14.7  66   2.7     0     0
2  1  2    aug  fri  18.5  73   8.5     0     0
3  1  2    aug  fri  25.9  41   3.6     0     0
> ForeDataFrm$Fwind
[1] 2.7 8.5 3.6
> ForeDataFrm[["Ftemp"]]
[1] 14.7 18.5 25.9
> ForeDataFrm[[5]]
[1] 14.7 18.5 25.9
> ForeDataFrm$Ftemp<-ForeDataFrm$Ftemp*1.8+32#对指定域名进行操作
> attach(ForeDataFrm)
> Ftemp
[1] 58.46 65.30 78.62
> Fwind
[1] 2.7 8.5 3.6
> detach(ForeDataFrm)
> Ftemp #detach以后就不能操作了
Error: object 'Ftemp' not found

 

> with(ForeDataFrm,{
+ print(Ftemp)
+ Ftemp<-(Ftemp-32)/1.8
+ print(Ftemp)
+ print(Fwind)
+ })
[1] 58.46 65.30 78.62
[1] 14.7 18.5 25.9
[1] 2.7 8.5 3.6

  

 

2. 数据结构

strfttime()-将日期变量转换为指定格式的字符串变量,strfttime(x,format)

1.5list

 

list(成分名1=对象名1,....)

  成立一个名为d的列表,成分名为L1,L2,L3,依次对应a,b,c两个目的

a<-c(1,2,3)
b<-matrix(nrow=5,ncol=2)
b[,1]=seq(from=1,to=10,by=2)
b[,2]=seq(from=10,to=1,by=-2)
c<-array(1:60,c(4,5,3))
d<-list(L1=a,L2=b,L3=c) 
names(d)  
str(d)
is.list(d) 
d$L1 
d[["L2"]]
d[[2]]

> str(d)
List of 3
$ L1: num [1:3] 1 2 3
$ L2: num [1:5, 1:2] 1 3 5 7 9 10 8 6 4 2
$ L3: int [1:4, 1:5, 1:3] 1 2 3 4 5 6 7 8 9 10 …

> d$L1 
[1] 1 2 3
> d[["L2"]]
     [,1] [,2]
[1,]    1   10
[2,]    3    8
[3,]    5    6
[4,]    7    4
[5,]    9    2
> d[[2]]
     [,1] [,2]
[1,]    1   10
[2,]    3    8
[3,]    5    6
[4,]    7    4
[5,]    9    2

2.1 向量

format()-将日期变量转换为指定格式的字符串变量,format(x,…)

  1.6数目对象的竞相转化

1.不同储存类型

typeof()
as.储存类型(数据对象名)
#numeric,integer,double,charactor,logical

2.两样结构类型之间的转会

> (a<-c(1:10))
 [1]  1  2  3  4  5  6  7  8  9 10
> (b<-matrix(a,nrow=5,ncol=2,byrow=TRUE))
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
[4,]    7    8
[5,]    9   10
> (a<-as.matrix(a))
      [,1]
 [1,]    1
 [2,]    2
 [3,]    3
 [4,]    4
 [5,]    5
 [6,]    6
 [7,]    7
 [8,]    8
 [9,]    9
[10,]   10
> is.matrix(a)
[1] TRUE
> (b<-as.vector(b))
 [1]  1  3  5  7  9  2  4  6  8 10
> is.vector(b)
[1] TRUE

  注意矩阵转成向量是从左到右的依次

as.matrix()
as.vector()

  

3.向量-因子

as.factor()
factor(向量名,order=TURE/FALSE,level=c(类别值列表))

  

> (a<-c("Poor","Improved","Excellent","Poor")) 
[1] "Poor"      "Improved"  "Excellent" "Poor"     
> (b<-factor(a,order=FALSE,levels=c("Poor","Improved","Excellent")))  
[1] Poor      Improved  Excellent Poor     
Levels: Poor Improved Excellent
> (b<-factor(a,order=TRUE,levels=c("Poor","Improved","Excellent")))
[1] Poor      Improved  Excellent Poor     
Levels: Poor < Improved < Excellent

  因子-向量:R不援助对因子直接抬高水平值,所以要先将因子转为向量,并加上相应品种的元素,再将向量转为因子

as.vector(因子名)

  

#######利用factor函数重新设置类别值
> (a<-c("Poor","Improved","Excellent","Poor")) 
[1] "Poor"      "Improved"  "Excellent" "Poor"     
> (b<-factor(a,levels=c("Poor","Improved","Excellent")))  
[1] Poor      Improved  Excellent Poor     
Levels: Poor Improved Excellent
> (b<-factor(a,levels=c("Poor","Improved","Excellent"),labels=c("C","B","A")))
[1] C B A C
Levels: C B A

###############借助类型转换增加因子的水平
> (a<-c("A","C","B","C")) 
[1] "A" "C" "B" "C"
> (b<-as.factor(a))
[1] A C B C
Levels: A B C
> b[5]<-"D"
Warning message:
In `[<-.factor`(`*tmp*`, 5, value = "D") :
  invalid factor level, NA generated

> c<-as.vector(b)
> typeof(c)
[1] "character"
> c[5]<-"D"
> (b<-as.factor(c))
[1] A C B C D
Levels: A B C D

  

2.1.1 爆发向量

函数vector有多少个参数:类型(mode)和长短(length),创立的向量中元素值取决于参数所指定的数据类型:数值型向量则元素值都为0,逻辑型都为FALSE,字符型都为””。以下多少个函数有几乎一样的机能(创立一个向量)并且只有一个参数即长度:numeric(),logical(),和character()。

  • vector(mode = 'character', length = 5) 发生一个字符类型的空向量。
  • x1 <- 1:4 产生int向量,[1 2 3 4 ]
  • x2 <- c(1,2,3,4) 产生num向量 [1 2 3 4]
  • x2 <- c(TRUE,1,'3','a') 产生char向量 [‘TRUE’,’1′,’3′,’a’]
  • as.character(x) 强制转换类型
  • names(x) <- c('name1','name2','name3') 添加数码标签

3、查看对象的序列

2.导入数据

1.读文件数据

#到向量中
> Forest<-scan(file="ForestData.txt",what=double(),skip=1)   #无法成功执行,要求数据类型一样
Error in scan(file = "ForestData.txt", what = double(), skip = 1) : 
  scan() expected 'a real', got 'aug'

#到数据框中
Forest<-read.table(file="ForestData.txt",header=TRUE)
str(Forest)
names(Forest)

Forest<-read.table(file="ForestData.txt",header=TRUE,stringsAsFactors=FALSE)
#取消对字符串类型按字母顺序从小到大排序

Forest<-read.table(file="ForestData.txt",header=TRUE,
 colClass=c("integer","integer","character","character","double","integer","double","double","double"))
#指定储存类型

  

2.外表数据导入

########################################读取SPSS数据
library(foreign)
Forest<-read.spss(file="ForestData.sav",use.value.labels = TRUE, to.data.frame = TRUE)
str(Forest)


########################读取Excel数据
install.packages("xlsx")
library("xlsx")
Forest<-read.xlsx("ForestData.xlsx",1,header=TRUE,as.data.frame=TRUE)
str(Forest)
levels(Forest$month)
Forest$month<-factor(Forest$month,order=TRUE,levels=c("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"))
levels(Forest$month)

#######################读取数据库数据
install.packages("RODBC")
library("RODBC")
MyConn<-odbcConnectAccess2007("ForestData.accdb",uid="",pwd="")
Forest<-sqlFetch(MyConn,"Table1")
close(MyConn)
str(Forest)

  

2.2 矩阵

  • 向量+维度
  • 先row,再col
  • attribute(x) 查看属性

class()、mode()、typeof()

3.数额统一与排列

2.2.1 发生矩阵

用matrix来创建:matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

挑选byrow代表数据交到的值是要按列填充(缺省值)仍旧按行填充
(假若为TRUE)。能够透过选拔dimnames给行列命名。

e = c(1:6)
f = matrix(e,2,3,byrow=TRUE)
f
    [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

另一种创制矩阵的不二法门是给维数适当的赋值,这种格局也能改变已有矩阵的维度

> dim(e)
NULL
> dim(e) <- c(2,3)
> e
    [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> dim(e) <- c(3,2)
> e
    [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

4、数据结构

3.1.多少统一

## Default S3 method:
merge(x, y, ...)

## S3 method for class 'data.frame'
merge(x, y, by = intersect(names(x), names(y)),
      by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
      sort = TRUE, suffixes = c(".x",".y"),
      incomparables = NULL, ...)


authors <- data.frame(
    surname = I(c("Tukey", "Venables", "Tierney", "Ripley", "McNeil")),
    nationality = c("US", "Australia", "US", "UK", "Australia"),
    deceased = c("yes", rep("no", 4)))
books <- data.frame(
    name = I(c("Tukey", "Venables", "Tierney",
             "Ripley", "Ripley", "McNeil", "R Core")),
    title = c("Exploratory Data Analysis",
              "Modern Applied Statistics ...",
              "LISP-STAT",
              "Spatial Statistics", "Stochastic Simulation",
              "Interactive Data Analysis",
              "An Introduction to R"),
    other.author = c(NA, "Ripley", NA, NA, NA, NA,
                     "Venables & Smith"))

(m1 <- merge(authors, books, by.x = "surname", by.y = "name"))
(m2 <- merge(books, authors, by.x = "name", by.y = "surname"))

> (m1 <- merge(authors, books, by.x = "surname", by.y = "name"))
   surname nationality deceased                         title
1   McNeil   Australia       no     Interactive Data Analysis
2   Ripley          UK       no            Spatial Statistics
3   Ripley          UK       no         Stochastic Simulation
4  Tierney          US       no                     LISP-STAT
5    Tukey          US      yes     Exploratory Data Analysis
6 Venables   Australia       no Modern Applied Statistics ...
  other.author
1         <NA>
2         <NA>
3         <NA>
4         <NA>
5         <NA>
6       Ripley
> (m2 <- merge(books, authors, by.x = "name", by.y = "surname"))
      name                         title other.author nationality
1   McNeil     Interactive Data Analysis         <NA>   Australia
2   Ripley            Spatial Statistics         <NA>          UK
3   Ripley         Stochastic Simulation         <NA>          UK
4  Tierney                     LISP-STAT         <NA>          US
5    Tukey     Exploratory Data Analysis         <NA>          US
6 Venables Modern Applied Statistics ...       Ripley   Australia
  deceased
1       no
2       no
3       no
4       no
5      yes
6       no

  

2.2.2 矩阵拼接

  • rbind(x,x1) row拼接(纵向)
  • cbind(x,x1) col拼接(横向)

(1)向量

3.2.数量排列

order(..., na.last = TRUE, decreasing = FALSE,
      method = c("auto", "shell", "radix"))

> ReportCard<-read.table(file="ReportCard1.txt",header=TRUE)
> Ord<-order(ReportCard$math,na.last=TRUE,decreasing=TRUE) #按math从高到低排列
> Ord#位置向量
 [1] 48 60 59 15 27 23 36 30 49 42  6 28  7 41 58 32 54 45 39 44
[21] 52 12 40 38 10  4 29 26 56 33 43 37 31 16  3 11  9 55 50 13
[41] 47 51 53 22 24 57 18  8 19 21 34 46  2 14 20 35  5 25 17  1
> a<-ReportCard[Ord,]
> fix(a)

 图片 3 

2.2.3 矩阵维度的命名

> dimnames(e) <- list(c('1','2','3'), c('a','b'))
> e
  a b
1 1 4
2 2 5
3 3 6

向量创设:c()函数创造向量

4.缺失数据

is.na()
is.nan()
complete.cases(matrix/dataframe)#注意判断每个观测样本是否有缺失值

 

> a<-ReportCard[Ord,]
> a<-is.na(ReportCard$math)
> ReportCard[a,]
     xh sex poli chi math
1 92103   2   NA  NA   NA
> a<-complete.cases(ReportCard)#判断完整观测
> ReportCard[!a,]#显示有缺失成绩的学生信息
     xh sex poli chi math
1 92103   2   NA  NA   NA
3 92142   2  NaN  70   59

  生成缺失值报告

md.pattern()

  

> library("mice")

> md.pattern(ReportCard)

xh sex chi math poli
58 1 1 1 1 1 0  #有58个学生的大成数据是完整的,有0个缺失值的变量
1 1 1 1 1 0 1  #有1名学员在poli这些变量上取了确实值
1 1 1 0 0 0 3 #有一名知识分子在两个变量上取了缺失值
   0 0 1 1 2 4 #在各变量上取缺失值的观看样本数

 

  

 缺失值处理

#粗暴的删除
na.omit()

  

> ReportCard1<-read.table(file="ReportCard1.txt",header=TRUE)
> ReportCard2<-read.table(file="ReportCard2.txt",header=TRUE)
> ReportCard<-merge(ReportCard1,ReportCard2,by="xh")
> attach(ReportCard)
> SumScore<-poli+chi+math+fore+phy+che+geo+his
> detach(ReportCard)
> avScore<-SumScore/8
> ReportCard$sumScore<-SumScore
> ReportCard$avScore<-avScore
> sum(is.na(ReportCard$sumScore))
[1] 2
> mean(complete.cases(ReportCard))
[1] 0.9666667

  

2.3 数组

维度可以抵达多维(三维及以上)的矩阵,R中的矩阵只能有2维
创立方法是 x <- array(1:24, dim = c(2,3,4))

向量索引:#下标情势索引 vector<-c(1,2,3,4)  vector[1] 
 vector[c(1:3)]

5.变量计量与重编码

2.4 列表(list)

能够涵盖不同门类的靶子,通过重新方括号还是名词来走访

l <- list('a', 2.4, TRUE, 4L, -2)
l <- list(x1 = 'a', x2 = 2.4, x3 = TRUE, x4 = 4L, x5 = -2) # 可以命名,通过l[[2]]或l[['x2']]访问
l <- list(c(1,2,3),c(2,4,5))

     #按名称索引 names(vector)<-c(“one”,”two”,”three”,”four”) 
   vector[c(“one”,”two”)]

5.1变量总结

+ – * / ^ 整除:%/% 求余:%%

函数

图片 4

图片 5

图片 6

图片 7

图片 8

2.5 因子

  • 拍卖分类变量。包括各类变量和命名变量。通过在factor函数中增长参数
    order = TRUE来构造顺序变量。
  • 平头变量+标签(优于整数变量)。常用来线性模型

一个因子不仅包括分类变量本身,还包括变量不同的可能水平(即便它们在多少中不出现)。因子函数factor用上边的选项制造一个因子:

x <- factor(c('male','male','male','female','female'))
x
[1] male   male   male   female female
Levels: female male

y <- factor(c('male','male','male','female','female'), levels = c('male','female') )
y
[1] male   male   male   female female
Levels: male female # 和x相比,顺序不同。依次编号

factor(x, levels = sort(unique(x), na.last = TRUE), labels = levels, exclude = NA, ordered = is.ordered(x))`

levels
用来指定因子可能的品位(缺省值是向量x中互异的值);labels用来指定水平的名字;exclude表示从向量x中剔除的水准值;ordered是一个逻辑型选项用来指定因子的程度是否有次序。回想数值型或字符型

对因子举办全体性了然,能够选拔table(x)查看因子不同档次的数量。仍可以够去掉因子的属性levels,使用unclass(x),会变成一个integer的向量。

     #which格局索引  which(vector==1) which(vector==c(1,2)) 
 which.max(vector)

5.2自定义函数

MyFun<-function(dataname1=x1,dataname2=x2,key=c){
 result<-merge(dataname1,dataname2,by=key)
 return(result)
}
#####调用用户自定义函数
MyData<-MyFun(dataname1=ReportCard1,dataname2=ReportCard2,key="xh")
MyData<-MyFun(ReportCard1,ReportCard2,"xh")
#调试函数

> debug(MyFun)
>
MyData<-MyFun(dataname1=ReportCard1,dataname2=ReportCard2,key=”xh”)
debugging in: MyFun(dataname1 = ReportCard1, dataname2 = ReportCard2,
key = “xh”)
debug at #1: {
result <- merge(dataname1, dataname2, by = key)
return(result)
}
Browse[2]> n
debug at #2: result <- merge(dataname1, dataname2, by = key)
Browse[2]> n
debug at #3: return(result)
Browse[2]> n
exiting from: MyFun(dataname1 = ReportCard1, dataname2 = ReportCard2,
key = “xh”)

  

2.6 缺失值

  • NA/NaN, NaN 属于NA,NA不属于NaN
  • NaN一般用来数字缺失值,可是NA更广。同时NA有档次属性,如字符型整数型
  • is.na()is.nan() 判断是否是缺失值

       #subser形式索引  subset(vector,vector>2&vector<4)

5.重编码

1.分组

ReportCard<-within(ReportCard,{
 avScore[avScore>=90]<-"A"
 avScore[avScore>=80 & avScore<90]<-"B"
 avScore[avScore>=70 & avScore<80]<-"C"
 avScore[avScore>=60 & avScore<70]<-"D"
 avScore[avScore<60]<-"E"
 })
flag<-ReportCard$avScore %in% c("A","B","C","D","E")
ReportCard$avScore[!flag]<-NA

  图片 9

2.重定义体系值

> unique(ReportCard$sex)   #获得性别的取值,检查性别取值范围是否正确
[1] 2 1
> ReportCard$sex<-factor(ReportCard$sex,levels=c(1,2),labels=c("M","F"))
> str(ReportCard$sex)
 Factor w/ 2 levels "M","F": 2 1 2 2 1 2 2 1 1 2 ...

  

2.7 数据框 data frame

储存表格数据。
可以说是各类要素长度相同的列表

  • 每个元素代表1列数据(竖着的1列)
  • 每个元素的长短代表行数
  • 要素类型可以不同

     #%in%艺术索引  c(1,5)%in%vector

6.数量筛选

1.按原则筛选

#提取男生(性别为M)的数据
MaleScore1<-subset(ReportCard,ReportCard$sex=="M")
Sel1<-ReportCard$sex=="M"
MaleScore1<-ReportCard[Sel1,]

#提取男生(性别为M)且平均成绩不及格(小于60分)的学生数据
MaleScore2<-subset(ReportCard,ReportCard$sex=="M" & ReportCard$avScore=="E")

  

2.随机筛选

sample(x, size, replace = FALSE, prob = NULL)#对数据按指定方式筛选观测样本,prob表示向量中各元素有不同的入样概率
set.seed()#希望抽样结果可以重复出现

  

set.seed(10000)
bh<-sample(1:60,size=30,replace=FALSE)
MySample<-ReportCard[bh,]
#以60个学生的行编号作为抽样依据,通过对行编号的随机抽样生成位置向量,实现对成绩的随机抽样

  

2.7.1 输入数据框

t <- data.frame(第一列,第二列,…,row.names = ,)

> t <- data.frame(id = c(1,2,3,4),grade = c(70,77,89,90))
> t
   id  grade
1  1    70
2  2    77
3  3    89
4  4    90
  • nrow和ncol可以分辨查看行和列数
  • 和矩阵的出入在于,每一列类型可以不同
  • 能够用data.matrix()转化为矩阵

向量编辑 : #向量扩大(x<-c(x,c(5,6,7)))  #单个元素的去除 
x<-x[-1]   #五个因素的删除  (x<-x[c(3:5)])

7.多太傅存

write.table(ReportCard,file="ReportCard.txt",sep=" ",quote=FALSE,append=FALSE,na="NA",row.names=FALSE,col.names=TRUE)

2.8 日期和时间(未完待续)

date(),
用as.date()可以把2016-07-20储存为date格式。用weekdays()、montths()、quarters()能分别报告我们什么时候哪十二月哪一季度,julian()

向量排序:sort(x,decreasing = FALSE,na.last = TRUE…)     
倒序——rev()函数

  

什么选出数据汇总的某一个?

万一精通名称name,可以用$name来选出
例如

> x<- data.frame(v1 = 1:3,v2 = c('a','b','c'))
> x
  v1 v2
1  1  a
2  2  b
3  3  c
> x$v1
[1] 1 2 3
> x$v1>2
[1] FALSE FALSE  TRUE
> x[x$v1>1,]
  v1 v2
2  2  b
3  3  c
> x[which(x$v1>1),]
  v1 v2
2  2  b
3  3  c

等差数列的建立:seq(from = 1, to = 1, by =  ((to – from)/length.out –
1),length.out = NULL,…)   seq(1,-9,by = -2)

8.决定流程

图片 10

MyTable<-function(mytable){
 rows<-dim(mytable)[1]
 cols<-dim(mytable)[2]
 DataTable<-NULL
 for(i in 1:rows){
  for(j in 1:mytable$freq[i]){
   RowData<-mytable[i,c(1:(cols-1))]
   DataTable<-rbind(DataTable,RowData)
  }
 }
 row.names(DataTable)<-c(1:dim(DataTable)[1])
 return(DataTable)
}

Grade<-rep(c("B","C","D","E"),times=2)
Sex<-rep(c("M","F"),each=4)
Freq<-c(2,11,12,5,2,13,10,3)
Table<-data.frame(sex=Sex,grade=Grade,freq=Freq)
MyData<-MyTable(Table)

> Table
  sex grade freq
1   M     B    2
2   M     C   11
3   M     D   12
4   M     E    5
5   F     B    2
6   F     C   13
7   F     D   10
8   F     E    3

  

 

3. apply函数

apply体系函数的主干职能是对数组(array,可以是多维)或者列表(list)依据元素或因素构成的子集合举办迭代,并将近年来因素或子集合作为参数调用某个指定函数。vector是一维的array,dataframe可以看作特殊的list。

这一个函数间的关系

作用目标 在每个元素上应用 在子集合上应用
array apply tapply
list lapply(…) by

里头lapply(…)包括一雨后春笋函数

lapply
   |
   | -> 简化版: sapply
   |             | -> 可设置返回值模板: vapply
   |             | -> 多变量版: mapply
   |
   | -> 递归版: rapply

除此以外vector相比较奇怪,vector是一维的array,可是却不全是和array使用相同的函数。在按要素迭代的场地下,使用和list一样的lapply函数;而在按子集合迭代的动静下,tapply和by都能用,只是重回值格局各异。

再次数列的树立:rep(x,times=1,length.out=NA,each=1)    rep(1:3, each=2,
times=2)  112233112233112233

apply本着某一维度举行处理

apply(array, margin, FUN, ...)
在array上,沿margin方向,依次调用FUN。重返值为vector。margin表示数组引用的第几维下标(即array[index1,
index2,
…]中的第多少个index),1对应为1代表行,2代表列,c(1,2)表示行列。例如
apply(x,2,sum)对列求和。

(2)矩阵

lapply 循环处理列表中的每一个因素

lapply(列表,函数/函数名,其他参数)
sapply
和lapply一样,只是化简了结果,能用向量就用向量,能用矩阵就用矩阵。

开创矩阵:matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)

mapply lapply的泛滥成灾版本

mapply(函数,数据,参数)以下两句效果是千篇一律的

list(rep(1,4),rep(2,3),rep(4,2),rep(4,1))
mapply(rep,1:4,4:1)

x<-c(1:9)

tapply对向量子集举行操作

tapply(向量,因子/因子列表,函数)
tapply(array, indices, margin, FUN=NULL, ...)

按indices中的值分组,把相同值对应下标的array中的元素形成一个聚集,应用到FUN。类似于group
by
indices的操作。假设FUN重返的是一个值,tapply再次回到vector;若FUN重回四个值,tapply重回list。vector或list的尺寸和indices中不同值的个数相等。

当FUN为NULL的时候,再次来到一个尺寸和array中元素个数相等的vector,提醒分组的结果,vector中万分的元素所对应的下标属于同一组。例如,重回c(1,
2, 1, 3, 2),
表示依据传入的indices,第1、3个元素作为一组,第2、5个因素作为一组,第4个要素作为一组。

例如

x <- c(1:4,2:5,3:6)
f <- gl(3, 4) #产生因子水平(分组),三个因子每因子5个
tapply(x,f,mean)

a<-matrix(x,nrow=5,ncol=2,byrow=FAlSE,dimnames=list(c(“r1″,”r2″,”r3″,”r4″,”r5”),c(“c1″,”c2”)))

3.2排序

sort
order 给出排序后的下标,多少个专业

x <- data.frame(v1 = 1:5, v2= 2:6, v3 = 3:7)
x[order(x$v1, x$v2),]

矩阵和转换为向量:as.vector(),转换为向量时元素按列读取数据

3.3总计数据新闻

head
tail
summary
str
table

sum
any
all

xtabs 交叉表

矩阵索引:#按照地方索引   a[2,1]

     #据悉行和列的名称索引 a[“r2″,”c2”]

     #使用一维下标索引  a[,2] 

     #应用数值型向量索引 a[c(3:5),2]

矩阵编辑:#矩阵合并(a1<-rbind(a,c(11,12)))
(a2<-rbind(a,c(11:15)))

     #去除矩阵中元素  a5<-a[-1,]  #除去矩阵中的第一行

矩阵的运算:colSums()-对矩阵的各列求和  rowSums()-对矩阵的各行求和 
 colMeans()-对矩阵各列求均值  rowMeans()-对矩阵各行求均值

      t()-矩阵行列转换   det()-求解矩阵的行列式 
 crossprod()-求解三个矩阵的内积   outer()-求解矩阵的外积  %*%-矩阵乘法

      diag()-对矩阵取对角元素    solve()-对矩阵求解逆矩阵 
eigen()-对矩阵求解特征值和特征向量

(3)数组

创办数组:array(data,dim=length(data),dimnames=NULL)

x<-c(1:9)  

dim1<-c(“A1″,”A2″,”A3”)

dim2<-c(“B1″,”B2″,”B3″,”B4″,”B5”)

dim3<-c(“C1″,”C2”)

a<-array(x,dim=c(3,5,2),dimnames=list(dim1,dim2,dim3))

数组索引:#按下标索引  a[2,4,2]

     #按维度名称索引a[“A2″,”B3″,”C1”]

             #查看数组的维度  dim(a)

(4)数据框

创造数据框:data.frame()

#向量组成数据框

data_iris<-data.frame(s.length=c(1,1,1,1),s.width=c(2,2,2,2),w.length=c(3,3,3,3),w.width=c(4,4,4,4))

#矩阵组成数据框

data_matrix<-matrix(c(1:8),c(4,2))

data_iris2<-data.frame(data_matrix)

多少框索引:#列索引  data_iris[,1]     ||     data_iris$s.length   
||    data_iris[“s,length”]

                     #行索引   data_iris[1,]   || data_iris[1:3,]

       #元素索引  data_iris[1,1]       
 data_iris$s.length[1]       data_iris[“s,length”][1]

       #subset索引  subset(data_iris, s.length=1)

       #sqldf函数索引  library(sqldf)  newdf<-sqldf(“select *
from mtcars where carb=1 order by mpg”,row.names=TRUE)

数据框编辑:#日增新的样书数量 
data_iris<-rbind(data_iris,list(9,9,9,9))

      #扩大数据集的新属性变量 
data_iris<-rbind(data_iris,Species=rep(7,5))

      #多少框列名的编撰  names(data_iris)

(5)因子

创造因子体系 :

将statistics分解成因子型变量,水平为26个小写字母
(ff<-factor(substring(“statistics”),1:10,1:10,levels=letters))

除去没有包含在向量中的水平  f<-factor(ff)

#创造因子型向量,水平名称为letter 
factor(letters[1:20],labels=”letter”)

#成立有序的因数系列   z<-factor(LETTERS[1:4],ordered=TRUE)

经过gl()函数创设因子系列 
 gl(n,k,length=n*k,labels=seq_len(n),ordered=TRUE)

n-代表因子水平的个数  

k-代表每个水平的重复数

length-表示生成的连串的长短

labels-一个n维向量,表示因子水平

ordered-一个逻辑值,为TRUE表示有序因子,为FALSE则表示无序因子

gl(2,3,labels=c(“T”,”F”))

因子的存储形式:

> status<-c(“Poor”,”Improved”,”Excellent”,”Poor”)
> class(status)    #翻开向量的序列
[1] “character”
> s<-factor(status,ordered=TRUE)
> s
[1] Poor Improved Excellent Poor
Levels: Excellent < Improved < Poor
> class(s)
[1] “ordered” “factor”   #翻看数据的品类
> storage.mode(s)  #查看存储类型,可以看到因子是按整数存储的
[1] “integer”
> as.numeric(s)   #转移为数值型向量
[1] 3 2 1 3
> levels(s)   #查阅因子的水准
[1] “Excellent” “Improved” “Poor”

 

(6)列表

成立列表:list(object1,object2,…)

data<-list(a=c(1,2,3,4),b=c(“true”,”false”),c=c(“one”,”two”,”three”,”four”),d=(1+3i))

列表索引:#列索引 data[[1]]   ||   data$a     ||data[[“a”]]

    #元素索引  data[[1]][1]

列表编辑:列表的编纂和向量类似,使用c()函数举办统一。  

#充实名目为e的一列

data1<-c(data,list(e=c(3,4,5)))

或者data1<-c(data,e=list(c(3,4,5)))

 

相关文章