文章目录
- 列表
- 创建
- 维度和运算
- 索引
- 转化
- 组合列表
- 数据框
- 创建
- 索引
- 基本数据框操作
列表
列表是一个向量,其每个元素的类型可以不同,可以是向量、矩阵或函数等。
创建
- list函数用于创建列表,各元素之间使用逗号分隔。
- 可以在创建的时候对各元素命名,也可以在创建后使用names函数进行命名
维度和运算
- 列表没有维度,故不能对其应用dim函数。列表的长度(length函数)即为顶层元素个数。
- 因列表允许元素类型不同,故通常算术运算(双目运算)对列表不起作用,除非参与运算的两个列表的元素类型相同。 列表支持对其中每一元素进行算术运算或其他操作。
索引
- 顶层元素索引(返回的是一个列表。):与向量类似,使用[]和正或负的下标数字、元素名称或逻辑索引。
- 列表元素内容索引:
使用双方括号[[]]传入正整数或指定该元素的名称的字符串
对于列表中的 命名元素(前提) ,可使用美元符号运算符$。此方法与使用双方括号并传入命名字符串作用一样,但是 IDE可自动补全,且支持部分匹配的元素名称,更方便。
转化
可使用as.list将其他类型转化为列表,但是因列表元素类型可以不同,故一般不把列表转化为其他类型。
组合列表
c函数可用于列表的拼接,cbind和rbind 也可用于列表的拼接,但不建议用。
数据框
数据框类似一个电子表格,每列可以存储不同类型的数据,每列数据类型必须相同,每列具有相同数目的元素。
创建
data.frame用于创建数据框。
行命名:
- 输入的向量都没有名称时,每行从1开始自动编号。
- 若有名称,行向量取自第一个向量的名称。
- 若不想按2对行进行命名,可向data.frame传入参数row.names=NULL,则会从1开始自动编号。
- 若想对行向量自己命名,可通过row.names传入行向量名称。
注:
- 可用于矩阵的函数也可用于数据框,如rownames返回行名等(row.names/colnames/col.names/nrow/dim等)
- length返回与ncol相同,names返回与colnames相同,因此对于数据框最好使用ncol和colnames
- 使用长度不同的向量从创建数据框,只要长度较短的向量能够刚好循环至总长度也可,即要求所有向量长度的最小公倍数必须与最长向量相等。
索引
- 规则与矩阵相同,返回是一个数据框,如果只取某一列,则返回为向量。
- subset(<数据框名>,<条件逻辑向量>,<要保留的名字向量>)
subset根据输入的<数据框名>,按照<条件逻辑向量>进行筛选,并返回满足条件的<要保留的名字向量>对应的列。下图两种方法意义相同
基本数据框操作
- t函数可将数据框转置,同时将所有元素转化为同一类型,并输出为矩阵。
- cbind/rbind实现数据框的拼接,但是cbind不会对列名进行查重复性检查。当存在相同的列时,使用merge函数进行合并。merge会使用两个数据框中共同的列,或者通过by参数指定共用的列。
- colSums/colMeans/rowSums/rowMeans可用于计算每列和、均值;每行和、均值
注:
- 列表可以将其他列表包含在内,因此列表被称为递归变量,向量矩阵数组则被称为原子变量。is.recursive和is.atomic分别用于检查一个变量是递归变量还是原子变量。
- NULL是一个空的变量,若某个元素必须存在但没有赋值,可以将NULL赋值给它。
a. NULL是一个变量,长度为零,不占用内存空间。NA是一个标量,长度为1。
b. 缺失值不是NULL。检查是否为NULL,使用is.null。
c. 将已存在的元素赋值为NULL,可将其删除。删除列表中的元素,需要使用list(NULL)。