首页 > 解决方案 > R中的列和行的走向是否重要?

问题描述

所以我从 Cancer Dependency Map 中导入了一些大型数据集。

特别是我有两个数据集,其中包含大约 600 个癌细胞系中的 17,000 多个基因敲除分数。(所以每个基因有 600 个分数)

然而,这两个数据集的格式化方式非常不同。在第一个数据集中,有 17,000 多个变量的 600 个观测值,而第二个数据集则相反,有 600 个观测值的 17,000 多个变量。

格式化数据集的列和行是否有正确的指南?我必须将其中一个转置以匹配另一个,但我不知道该怎么做。

600x17,000 还是 17,000x600?

标签: r

解决方案


这经常发生在生物信息学数据中,并且没有像这样存储数据的通用“标准”方式。根据您要执行的分析,您需要选择基因评分作为您的“观察结果”或癌细胞。您要访问每个细胞系或基因评分的数据集吗?我建议以矩阵格式而不是 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

如您所见,访问行和列的时间因存储数据的格式而异。

因此,在您的情况下,这完全取决于您计划对数据做什么,计划对它们应用哪些功能以及这些功能期望作为输入的内容。


推荐阅读