《R语言实战》学习笔记(二)

创建数据集

R可以处理的数据类型(模式),包括数值型、字符型、逻辑型(TRUE/FALSE)、复数型(虚数)和原生型(字节)

数据结构

R用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表:

R中的数据结构
向量
y <- c(8, 3, 5, 7, 6, 2, 8, 9)
any(y < 10)          #任意元素满足条件返回真值
#输出 TRUE
all(y < 10)          #所有元素满足条件返回真值
#输出 TRUE
which(y < 10)        #取数组中小于10值的下标
#输出 1 2 3 4 5 6 7 8

可以使用c ( )函数直接连接2个向量:

z <- c(x, y)

连续数构造的向量可以使用“:”来构造:

z <- c(1:100)
#或者
z <- 1:100

seq(from, to, by, length.out, …) 可以产生等间隔数列的函数
其中,from 表示开始的数,to表示结束的数,by表示间隔,length.out表示数列长度
例如:

seq(0,1,length.out = 11)      #生成[0,1]之间等间隔的11个数
#输出 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
seq(0,9, by = 2)             #生成[0,9]之间间隔为2的个数
#输出 0 2 4 6 8

rep(x, times, length.out, …)可以产生重复的若干个数字
其中,x 表示重复的数,tims表示重复次数,length.out表示数列长度
例如:

rep(1:4, times = 2)             #输出1 2 3 4 1 2 3 4
rep(1:4, length.out = 10)       #输出1 2 3 4 1 2 3 4 1 2
rep(c("a","b","c","d"), times=c(1,2,3,4))
#输出 "a" "b" "b" "c" "c" "c" "d" "d" "d" "d"
rep(c("a","b","c"), times=c(3,3,3))
#输出 "a" "a" "a" "b" "b" "b" "c" "c" "c"
矩阵

mymatrix <- matrix ( ① vector,② nrow=number_of_rows,③ ncol=number_of_columns,④ byrow=logical_value,⑤ dimnames=list(char_vector_rownames, char_vector_colnames))
① 矩阵的元素
② 矩阵的行数
③ 矩阵的列数
④ 是否按行填充 (默认“按列填充”)
⑤ 行名和列名

#与矩阵有关的函数:
dim()           #可以查看矩阵的维数
ncol()          #返回矩阵的列数 
nrow()          #返回矩阵的行数
as.vector()     #将矩阵强制转换为向量

创建矩阵举例:

x <- matrix(1:20,5,4,T)    #创建一个5X4矩阵
#输出
x
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16
[5,]   17   18   19   20
cells <- c(1,26,24,68)    
rnames <- c('R1','R2')
cnames <- c('C1','C2')
a <- matrix(cells,2,2,T,list(rnames,cnames))    #按行填充的2X2矩阵
#输出
a
   C1 C2
R1  1 26
R2 24 68

数组

数组是矩阵的推广,维度可以大于2,但各元素也只能有 一种模式
myarray <- array ( ① vector, ② dimensions, ③ dimnames)
① 数组的元素
② 各维度的元素数
③ 各维度的名称
创建数组举例:

dim1 <- c('A1','A2')
dim2 <- c('B1','B2','B3')
dim3 <- c('C1','C2','C3','C4')
z <- array(1:24,c(2,3,4),list(dim1,dim2,dim3))
#输出
z
, , C1

   B1 B2 B3
A1  1  3  5
A2  2  4  6

, , C2

   B1 B2 B3
A1  7  9 11
A2  8 10 12

, , C3

   B1 B2 B3
A1 13 15 17
A2 14 16 18

, , C4

   B1 B2 B3
A1 19 21 23
A2 20 22 24

数据框

数据框不同列的元素可以是不同模式,使用比矩阵更加普遍,是R中最常处理的数据结构
mydata <- data.frame ( col1, col2, col3, … )

patientID <- c(1, 2, 3, 4)
age <- c(25, 34, 28, 52)
diabetes <- c("Type1", "Type2", "Type1", "Type1")
status <- c("Poor", "Improved", "Excellent", "Poor")
patientdata <- data.frame(patientID, age, diabetes, status)
#输出
patientdata
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

选取数据框元素的几种方法:

#读取patientdata中第3个病人的status信息: 
patientdata$age[3]
#输出
 28
patientdata[[2]][3]
#输出
 28
patientdata[3,2]
#输出
 28

两种绑定数据框的方式:

  1. attach() + detach()
    attach():将数据框添加到R的搜索路径中
    detach():将数据框从R的搜索路径移除

例如:读取diabetes=Type1的病人的status信息:

patientdata$status[which(patientdata$diabetes=="Type1")]
#输出
Poor      Excellent Poor     
Levels: Excellent Improved Poor

可改写为:

attach(patientdata)
status[which(patientdata$diabetes=="Type1")]
#输出
"Poor"      "Excellent" "Poor"     
> detach(patientdata)

注意:
如果数据框被绑定之前,global environment已中有与数据框中的变量同名的其它变量(原始对象)时,R会让原始对象获得优先权,而屏蔽(mask)数据框变量

  1. with(dataframe, {statement})
    其中,{statement}是针对数据框dataframe执行的语句
    如果statement仅有一条语句,可以省略{ }

还是上面的例子:

with(patientdata, {
+     c<- which(diabetes=="Type1")
+     status [c]
+ })
#输出
Poor      Excellent Poor     
Levels: Excellent Improved Poor

注意:
with()函数的赋值仅在{ }内生效

因子

类别(名义型)变量和有序类别(有序型)变量在R中称为因子

factor(①x, ②levels, ③labels=levels, ④exclude, ⑤ordered)
①数据向量,也就是被转换成因子的向量
②因子水平
③指定各水平的名称
④从x中剔除某个水平值
⑤次序

x <- c(1,1,2,1,2,3,2,2,3,3,3,1,1,1,2)
f<-factor(x)
f
#输出
1 1 2 1 2 3 2 2 3 3 3 1 1 1 2
Levels: 1 2 3
x <- rep(1:5, 1:5)
f<-factor(x)
f
#输出
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
Levels: 1 2 3 4 5
x <- c("Hello","World","This","Is","R")
f<-factor(x)
f
#输出
Hello World This  Is    R    
Levels: Hello Is R This World

次序问题:

1.
status <- factor(status)
status
#输出
Poor      Improved  Excellent Poor     
Levels: Excellent < Improved < Poor

2.
status <-   factor(status, order=TRUE)  #按照字母顺序进行排序
status
#输出
Poor      Improved  Excellent Poor     
Levels: Excellent < Improved < Poor

3.
status <-   factor(status, ordered=TRUE,levels=c("Poor", "Improved", "Excellent"))
> status
#输出
Poor      Improved  Excellent Poor     
Levels: Poor < Improved < Excellent

因子的使用:

patientID <- c(1,2,3,4)
age <- c(25,34,28,52)
diabetes <-c("Type1","Type2","Type1","Type1")
status <- c("Poor","Improved","Excellent","Poor")
diabetes <- factor(diabetes)
status <- factor(status,order = TRUE)
patientdata <- data.frame(patientID,age,diabetes,status)
str(patientdata)    #显示对象的结构
#输出
'data.frame':   4 obs. of  4 variables:
 $ patientID: num  1 2 3 4
 $ age      : num  25 34 28 52
 $ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 1
 $ status   : Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3
summary(patientdata)    #显示对象的统计概要
#输出
   patientID         age         diabetes       status 
 Min.   :1.00   Min.   :25.00   Type1:3   Excellent:1  
 1st Qu.:1.75   1st Qu.:27.25   Type2:1   Improved :1  
 Median :2.50   Median :31.00             Poor     :2  
 Mean   :2.50   Mean   :34.75                          
 3rd Qu.:3.25   3rd Qu.:38.50                          
 Max.   :4.00   Max.   :52.00                        

另一种定义因子的函数:
gl(①n, ②k, ③length, ④labels, ⑤ordered)
①水平数
②重复的次数
③生成因子向量的长度
④因子水平的名称
⑤因子水平的次序

gl(3,5,labels=paste0("A",1:3))
#输出
A1 A1 A1 A1 A1 A2 A2 A2 A2 A2 A3 A3 A3 A3 A3
Levels: A1 A2 A3
列表

列表是R数据类型中最复杂的一种,可以将若干无关的对象整合到列表下,例如,某个列表可能是若干 向量、矩阵、数据框、其它列表的组合

list ( object1, object2, … )
object1, object2, …:可以是R的任何数据类型

g <- "My First List"
h <- c(25,26,18,39)
j <- matrix(1:10,nrow = 5)
k <- c("One","Two","Three")
mylist <- list(title = g,ages = h,j,k)
mylist
#输出
$title
[1] "My First List"

$ages
[1] 25 26 18 39

[[3]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

[[4]]
[1] "One"   "Two"   "Three"


mylist[[2]]
#输出
25 26 18 39
> mylist[["ages"]]
#输出
25 26 18 39

你可能感兴趣的:(《R语言实战》学习笔记(二))