R语言学习

R002 数据结构

2020-06-12  本文已影响0人  caoqiansheng

1.思维导图

R语言数据结构

2.定义

3 R数据存储结构

3.1 向量:函数c()

向量是储存数值型,字符型或逻辑型的一位数组,单个向量中的数据必须拥有相同类型的模式,执行组合功能的函数c()可用来创建向量。各类向量如下例所示:

a <- c(1,2,3,4,5,6)
b <- c("one","two","three")
c <- c(TRUE,TURE,TURE,FALSE,TURE,TURE)​
3.2 矩阵:函数matrix()

矩阵是一个二维数组,每个元素都拥有相同的模式(数值型,字符型,逻辑型),可通过函数matrix()创建,例如下列代码:

>cells <- c(1,26,24,28)
>rnames <- c("R1","R2")​
>cnames <- c("C​1","C2")​​​
> ​mymatrix <- matrix(cells,nrow=2,ncol=2,dimnames=list(rnames,cnames),byrow=TRUE)
> mymatrix   
   C1 C2
R1  1 26
R2 24 28​

其中byrow=TRUE,代表矩阵将按列填充,如byrow=FALSE,则按行填充。默认情况下均为按列填充。

3.3 数组:函数Array()

数组(array)与矩阵类似,但是维度可以大于2。像矩阵一样,数组中的数据也只能拥有一种模式。数组可通过array()函数创建,形式如下:

> dim1 <- c("A1","A2")
>​​ dim2 <- c("B1","B2","B3")
>​​ dim3 <- c("C1","C2","C3","C4")
​​> myarray <- array(1:24,c(2,3,4),dimnames=list(dim1,dim2,dim3))
> myarray
​, , 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​
3.4 数据框:函数data.frame()

1.数据框不同列之间数据类型可以不一致,但是单独的列内必须一致
​2.由于数据有多种模式,无法将此数据集放入一个矩阵。在这种情况下,可以通过data.frame()函数创建数据框

​> patientID <- c(1,2,3,4)
> age <- c(25,34,28,52)
> diabetes <- c("Type1","Type2","Type3","Type4")
> 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    Type3 Excellent
4         4  52    Type4      Poor
> patientdata$patientID
[1] 1 2 3 4​

记号$是用来选取一个给定数据框中的某个特定变量如果想生成糖尿病类型变量diabetes和病情变量status的列联表,可使用以下代码​​

> table(patientdata$diabetes,patientdata$status)
Excellent improved Poor  
Type1         0        0    1  
Type2         0        1    0  
Type3         1        0    0  
Type4         0        0    1​

在每个变量名前都键入一次patientdata$会很繁琐,可以联合使用函数attach()和detach()或单独使用函数with()来简化代码​函数attach()可将数据框添加到R的搜索路径中。R在遇到一个变量名以后,将检查搜索路径中的数据框。​函数detach()将数据框从搜索路径中移除。值得注意的是,detach()并不会对数据框本身做任何处理。这句是可以省略的,但其实它应当被例行地放入代码中,因为这是一个好的编程习惯。​​

> attach(mtcars)
> summary(mpg)
> plot(mpg,disp)
> plot(mpg,wt)
> detach(mtcars)

除此之外,另一种方式是使用函数with()​,函数with()的局限性在于,赋值仅在此函数的括号内生效。

> with(mtcars,{
print(summary(mpg))
plot(mpg,disp)
plot(mpg,wt)
 })
3.5 列表:函数list()

列表(list)是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象(或成分,component)的有序集合。列表允许你整合若干(可能无关的)对象到单个对象名下。例如,某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。可以使用函数list()创建列表列表成为了R中的重要数据结构。首先,列表允许以一种简单的方式组织和重新调用不相干的信息。其次,许多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"​

4. R处理数据类型

4.1 数值型(numeric)
4.2 字符型(character)
4.3 逻辑型(TRUE/FALSE)
4.4 因子(factor,也即分类变量)
> status <- factor(status,order=TRUE,levels = c("poor","improved","excellent"))
### ​各水平的赋值将为1=Poor、2=Improved、3=Excellent
> sex <- factor(sex,levels = c(1,2),labels = c("male",'female'))
​​### ​性别将被当成类别型变量,标签“Male”和“Female”将替代1和2在结果中输出,而且所有不是1或2的性别变量将被设为缺失值。
4.5 复数型(虚数)
4.6 原生型(字节)

5. R数据导入方法

5.1 手工输入:R中的函数edit()会自动调用一个允许手动输入数据的文本编辑器
> mydata <- data.frame(age=numeric(0),gender=character(0),weight=numeric(0))
> mydata <- edit(mydata)

语句mydata <- edit(mydata)的一种简捷的等价写法是fix(mydata)​以下代码创建了和之前用edit()函数所创建的一样的数据框。一个字符型变量被创建于存储原始数据,然后read.table()函数被用于处理字符串并返回数据框:

mydatatxt <- "
age gender weight
25 m 166
30 f 115
18 f 120
"
mydata <- read.table(header = TRUE,text = mydatatxt)
mydata
age gender weight
1  25      m    166
2  30      f    115
3  18      f    120​
5.2 外部源导入数据

参考
1.卡巴科弗. R语言实战[M]. 人民邮电出版社, 2013.

上一篇 下一篇

猜你喜欢

热点阅读