r - R中的列和行的走向是否重要?
问题描述
所以我从 Cancer Dependency Map 中导入了一些大型数据集。
特别是我有两个数据集,其中包含大约 600 个癌细胞系中的 17,000 多个基因敲除分数。(所以每个基因有 600 个分数)
然而,这两个数据集的格式化方式非常不同。在第一个数据集中,有 17,000 多个变量的 600 个观测值,而第二个数据集则相反,有 600 个观测值的 17,000 多个变量。
格式化数据集的列和行是否有正确的指南?我必须将其中一个转置以匹配另一个,但我不知道该怎么做。
600x17,000 还是 17,000x600?
解决方案
这经常发生在生物信息学数据中,并且没有像这样存储数据的通用“标准”方式。根据您要执行的分析,您需要选择基因评分作为您的“观察结果”或癌细胞。您要访问每个细胞系或基因评分的数据集吗?我建议以矩阵格式而不是 data.frame 存储您的数据集。然后访问数据集的行和列会更快。如果您决定使用 data.frame 格式,那么使用更少的列(在您的情况下为 600)会更有效。
当您访问以矩阵或 data.frame 格式存储的数据时,需要考虑以下几个时间测量:
library(microbenchmark)
m.long <- matrix (rnorm(17000 * 600 ), ncol=600 )
m.wide <- t(m.long)
dt.long <- as.data.frame(m.long)
dt.wide <- as.data.frame(m.wide)
microbenchmark(
m.long[, 100], m.long[100,],
m.wide[, 100 ], m.wide[100,],
dt.long[, 100], dt.long[100,],
dt.wide[, 100 ], dt.wide[100,] )
# Unit: microseconds
# expr min lq mean median uq max neval
# m.long[, 100] 48.7 54.80 59.017 57.80 62.20 102.3 100
# m.long[100, ] 7.6 26.05 37.982 42.00 47.95 97.9 100
# m.wide[, 100] 3.2 5.70 8.437 7.65 9.75 23.1 100
# m.wide[100, ] 196.9 644.25 604.437 702.25 719.55 1197.6 100
# dt.long[, 100] 13.9 19.20 28.599 26.50 35.15 82.6 100
# dt.long[100, ] 5344.6 5748.75 6369.545 5884.00 6113.65 14295.8 100
# dt.wide[, 100] 30.6 40.00 51.182 50.60 61.25 92.7 100
# dt.wide[100, ] 156880.1 171868.80 180059.101 177808.10 184051.20 279418.9 100
如您所见,访问行和列的时间因存储数据的格式而异。
因此,在您的情况下,这完全取决于您计划对数据做什么,计划对它们应用哪些功能以及这些功能期望作为输入的内容。
推荐阅读
- linux - KSH 中的动态环境变量
- c - 微软生成SSL证书的实现
- c# - 在 C# 中等效于 Haskell 的 Data.List.Span
- c# - microsoft excel 无法访问该文件有几个可能的原因 + Workbooks.Open +
- reactjs - 使用 GitHub 组织 Web 应用程序逻辑的最佳实践?
- vue.js - 异步导入 Vue.js SFC 组件的返回类型签名是什么?
- ios - (Swift) 展开 tableViewSection 后如何管理 tableView 单元格的名称?
- c# - 尝试通过属性默认值更改关系时出现意外的 InvalidOperationException
- c# - vs解决方案的nuget还原失败
- python - Python嵌套if语句在input()之后无法输出值