R 入门 iMooc 数据类型 函数,2.用到义务向量访问指定地点的因素

1.数据对象

1.1结构

  • vector。具有同样档次的数据的聚众,默许为列向量。Factor也是例外向量。
  • matrix。社团四个颇具同等类其他向量。列为变量(实例),行为观测(因子)
  • array数组。多张二维表的会聚
  • dataframe.与矩阵类似,不过储存类型区其他变量。
  • list列表。七个向量、矩阵、数组、数据库的集纳。用于将有关总括分析结果“打包”

图片 1

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

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=)#包含多少元素

  访问向量

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) 常用于标记样本

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):|

1.4dataframe

1.2 字符型

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

创建

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]

  访问

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. 数据结构

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 向量

  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') 添加数据标签

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) 查看属性

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

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拼接(横向)

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

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))

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))

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的向量。

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() 判断是或不是是缺失值

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列)
  • 每个元素的长度代表行数
  • 要素类型可以分化

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()转化为矩阵

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()

  

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

如若驾驭名称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

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都能用,只是再次来到值格局不一样。

apply本着某一维度进行处理

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

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

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

mapply lapply的不可胜数版本

mapply(函数,数据,参数)以下两句效果是同等的

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

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)

3.2排序

sort
order 给出排序后的下标,七个正经

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

3.3统计数据音讯

head
tail
summary
str
table

sum
any
all

xtabs 交叉表

相关文章