数据框
- 矩阵和数据框的异同
- 矩阵:只允许1种数据类型。
- 数据框:每列允许1种数据类型。
初始化数据框
- 代码初始化
df1 = data.frame(
col1 = c(...),
col2 = paste("...", ...),
col3 = rep(...),
stringsAsFactors = F # 字符向量默认自动转为因子,赋值为F以禁用该行为
)
- 已有数据转换:
as.data.frame(...)
- 文件读取、R语言内置数据…
数据框查询和修改
- 维度信息:
dim
、nrow
、ncol
- 行列名:
rownames
、colnames
- 修改:
rownames(...) =
赋值一个向量以更改全部rownames(...)[...]
取子集以更改部分。
- 取子集:
- 注意:
- 取子集输入的向量顺序与子集对应,可能发生行/列颠倒。
- 若使用逻辑向量取子集,逻辑向量可能发生循环补齐。
- 取子集时,若使用类似
df1[c(...)]
只输入一个维度时,则是按列取子集,同df1[, c(...)]
。 - 使用
[]
索引(取子集)时,将返回一个数据框,若使用df1$...
、df1[[...]]
则将返回向量(仅能取列或单个元素)。
- 按列名:
df1$score
、df1[, c('gene', 'change')]
- 按坐标:
df1[2,2]
、df1[c(1, 3), 1:2]
- 按逻辑值:
df$gene[df$score > 0]
- 添加行/列:
- 取不存在的子集赋值。
df1$new_col = c(...)
- 与
list
对象rbind
;与向量对象cbind
- 删除:
- 取子集后,原地赋值。
- 取列子集,对列子集赋
NULL
。
- 连接数据框:
merge(...)
矩阵
初始化矩阵
- 代码初始化
# byrow使matrix按行填充数据
matrix(1:9, nrow = 3, byrow = T, dimnames = list(rownames, colnames)
- 已有数据转换
cbind(c(...), c(...)) # 列堆叠
rbind(c(...), c(...)) # 行堆叠
dim(old_vector) = c(nrow, ncol) # 修改向量dim
矩阵查询和修改
- 维度信息、行列名、取子集、添加/删除均相似。
- 但需要注意:
- 取子集时,若使用类似
df1[c(...)]
只输入一个维度时,矩阵将被扁平化(bycol
),返回向量。
- 矩阵转置:
t(...)
- 修改维度:
dim(...) = c(...)
列表
初始化列表
- 代码初始化
list('a' = ..., 'b' = ...) # 初始化有标签的列表
list(..., ...) # 初始化无标签的列表(数字索引)
列表查询和修改
- 取子集:
- 注意:
- 使用
[]
进行索引将返回一个子列表,若想返回内容,需使用[[...]]
/list1$...
- 修改时,仅可更改列表中元素内容,而不能更改其标签。通过访问内容并赋值来进行修改。
- 按标签:
list1$...
、list1[c(...)]
- 按数字/逻辑下标:
list1[-2]
、list1[c(T, F, ...)]
- 添加元素:对未使用的标签/数字索引进行赋值。
- 删除元素:
list1$... = NULL
、list1[[...]] = NULL