小编Bri*_*ats的帖子

是否有更快的方法来对稀疏矩阵进行子集而不是'['?

我是seqMeta软件包的维护者,并且正在寻找关于如何加速将大矩阵分成大块的瓶颈的想法.

背景

seqMeta包用于分析遗传数据.所以你有一组科目(n_subject)和一些遗传标记(n_snps).这导致n_subject x n_snp矩阵(Z).还有一个数据框可以告诉您哪些snps组合在一起进行分析(通常哪些snps包含给定的基因).

虽然Z可能很大,但它很稀疏.通常,小于10%,有时约2%的值是非零的.sprase矩阵表示似乎是节省空间的明显选择.

当前项目:nsubjects~15,000和nsnps~2百万,分割超过200,000.

随着数据量的不断增长,我发现时间限制因素往往是分组数,而不是数据的实际大小.(参见下面的示例,运行时是n_splits的线性函数,用于相同的数据)

简化示例

library(Matrix)

seed(1)

n_subjects <- 1e3
n_snps <- 1e5
sparcity <- 0.05


n <- floor(n_subjects*n_snps*sparcity) 

# create our simulated data matrix
Z <- Matrix(0, nrow = n_subjects, ncol = n_snps, sparse = TRUE)
pos <- sample(1:(n_subjects*n_snps), size = n, replace = FALSE)
vals <- rnorm(n)
Z[pos] <- vals

# create the data frame on how to split
# real data set the grouping size is between 1 and ~1500
n_splits <- 500 …
Run Code Online (Sandbox Code Playgroud)

r matrix sparse-matrix

5
推荐指数
0
解决办法
662
查看次数

将列名称整理成变量

我从调查中得到了一个非常混乱的数据集,其中每个复选框都是一个指示变量.因此,不要将性别(或种族)作为带有M/F作为条目的变量,而是有一个gender_m和一个带有指标的gender_f列.

简化示例:

df <- tribble(
  ~id, ~gender_m, ~gender_f,
  #--|----------|---------
  1L , 0        , 1,
  2L , 1        , 0,
  3L , 0        , 0,
  4L , 1        , 1
  )
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

  result <- tribble(
    ~id, ~gender,
    #--|----------
  1L , 'f',
  2L , 'm',
  3L , 'Missing',
  4L , 'More than 1 selected'
)
Run Code Online (Sandbox Code Playgroud)

对于像性别这样的东西,只有2列,它很容易硬编码,但我试图使它尽可能通用,因为像种族(或你使用的编程语言)这样的东西有多种可能性.

我有近千列但不到20个实际变量.所有列都是表格<variable_name>_<potential_value>.

我确定我错过了一些整洁的功能,但我的googlefu今天似乎很弱.

r dplyr tidyr purrr

1
推荐指数
1
解决办法
260
查看次数

标签 统计

r ×2

dplyr ×1

matrix ×1

purrr ×1

sparse-matrix ×1

tidyr ×1