R第二章:数据结构

数据结构

R拥有许多用于存储数据的对象类型,包括标量,向量,矩阵,数组,数据框和列表。

1,向量

向量是用于存储数值型,字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。

a <- c(1, 2, 5, 3, 6, -2, 4)
b <- c("one", "two", "three")
c <- c(TRUE, TRUE, FALSE, TRUE, FALSE)

a是数值型向量,b是字符型向量,而c是逻辑型向量。单个向量中的数据必须拥有相同的类型或模式,同一向量中无法混杂不同模式的数据。

标量 是只含一个元素的向量,例如 f <- 3, g <- "US" 和 h <- TRUE,它们用于保存常量。 

通过在方括号中给定元素所处位置的数值,可以访问向量中的元素。

a[3]
a[c(1, 3, 5)]
a[2:6]

a[2:6] 使用的冒号用于生成一个数值序列。

2, 矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型,字符型或逻辑型)。可通过函数matrix()创建矩阵。

一般使用格式为:

mymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_value,

         dimnames=list(char_vector_rownames,char_vector_colnames))

byrow=FALSE ,默认情况下是按列填充。

cells <- c(1, 26, 24, 68)
rnames <- c("R1", "R2")
cnames <- c("C1", "C2")
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=FALSE,
                                dimnames=list(rnames, cnames))

使用下标和方括号来选择矩阵中的行,列或元素。

x[i, ] 指矩阵x中的第i 行,x[ ,j] 指第j 列, x[i, j] 指第i行第j个元素。选择多行或多列时,下标i 和 j  可为数值型向量。

x[2, ]
x[ , 2]
x[1, 4]
x[1, c(4, 5)]

3, 数组

数组(array) 与矩阵类似,但是维度可以大于2。数组可通过函数array()创建。

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),dimnames=list(dim1, dim2, dim3))

从数组中选取元素的方式与矩阵相同。

4,数据框

不同的列可以包含不同模式(数值型,字符型等)的数据。数据框可通过函数data.frame()创建

mydata <- data.frame(col1, col2, col3, ...)

其中的列向量col1, col2, col3 等可为任何类型, 每一列的名称可由函数names指定。

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)
rownames <- c("row1", "row2", "row3", "row4")
patientdata <- data.frame(patientID, age, diabetes, status, row.names=rownames)

选取数据框中的元素的方式有若干种,可以用下标记号,也可直接指定列名。

patientdata[1:2]
patientdata[c("diabetes", "status")]
patientdata$age

记号$表示patientdata数据框中的变量age,它被用来选取一个给定数据框中的某个特定变量。

还有一些捷径:联合使用函数attach()和detach()或单独使用函数with()来简化代码。

attach()可将数据框添加到R的搜索路径中。R在遇到一个变量名以后,将检查搜索路径中的数据框。

detach()将数据框从搜索路径中移除。

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

attach()和detach()最好在分析一个单独的数据框,并且不太可能有多个同名对象时使用。

with()函数

with(mtcars, {
    print(summary(mpg))
    plot(mpg, disp)
    plot(mpg, wt)
})

在这种情况下,{}之间的语句都是针对数据框mtcars执行,这样就无需担心名称冲突。如果仅有一条语句,{}也可以省略。

函数with()的局限性在于,赋值仅在此函数的括号内生效。如果你需要创建在with()结构以外存在的对象,使用特殊赋值符<<-替代标准赋值符( <-),它可将对象保存到

with()之外的全局环境中。

5, 因子

变量可归结为名义型,有序型或连续型变量。

名义型变量是没有顺序之分的类别变量。

有序型变量表示一种顺序关系 ,而非数量关系。

连续型变量可以呈现为某个范围内的任意值,并同时表示了顺序和数量。

类别(名义型)变量和有序类别(有序型)变量在R中成为因子(factor)。因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。

函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1...k](其中k是名义型变量中唯一值的个数),同时一个由字符串 (原始值)组成的内部向量将映射到这些整数上。

名义型变量:

diabetes <- c("Type1", "Type2", "Type1", "Type1")
diabetes <- factor(diabetes)

要表示有序型变量,需要为函数factor()指定参数ordered=TRUE

status <- c("Poor", "Improved", "Excellent", "Poor")
status <- factor(status, ordered=TRUE)
#通过指定levels选项来覆盖默认排序。
status <- factor(status, ordered=TRUE, 
                        levels=c("Poor", "Improved", "Excellent"))

数值型变量可以用levels和labels参数来编码成因子。如果男性被编码成1,女性被编码成2,则:

sex <- factor(sex, levels=c(1, 2), labels=c("Male", "Female"))

把变量转换成一个无序因子。注意标签的顺序必须和水平相一致。

6,列表

列表是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象(或成分)的有序集合。列表允许你整合若干(可能无关的)对象到单个对象名下。

可以使用函数list()创建列表

mylist <- list(object1, object2, ...)

也可以为列表中的对象命名

mylist <- list(name1=object1, name2=object2,...)

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[[2]]
mylist[["ages"]]
#对于命名成分,还可以使用$来访问
mylist$ages

7,处理数据对象的实用函数

length(object)  显示对象中元素的数量

dim(object)  显示某个对象的维度

str(object)  显示某个对象的结构

class(object)  显示某个对象的类或类型

mode(object)  显示某个对象的模式

names(object)  显示某对象中各成分的名称

c(object, object, ...)  将对象合并入一个向量

cbind(object, object, ...)  按列合并对象

rbind(object, object, ...)  按行合并对象

head(object)  列出某个对象的开始部分

tail(object)  列出某个对象的最后部分

ls()  显示当前的对象列表

rm(object, object, ...)  删除一个或更多个对象。语句rm(list=ls())将删除当前工作环境中的几乎所有对象

newobject <- edit(object)  编辑对象并另存为newobject

fix(object)  直接编辑对象

 

转载于:https://www.cnblogs.com/xinlanzhang7319/p/7490806.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值