r将样品成型为多个数据框(96孔板)

时间:2018-10-24 16:33:50

标签: r

我希望获取一份样品清单,并将其放入特定大小的数据框(96孔板)中。

我有一些脚本可以帮助我做到这一点:

#some sample ids
ids <- c(LETTERS, letters)
#plate size:
n <- 96
nrow <- 8
samples <- character(n)
samples[seq_along(ids)] <- ids

samples <- matrix(samples, nrow=nrow)
colnames(samples) <- seq_len(n/nrow)
rownames(samples) <- LETTERS[seq_len(nrow)]

但是,我的ids列表的长度超过96个样本,我希望一旦第一个样本已满就开始一个新的“标牌”数据帧。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

split函数可用于将数据分成96个元素组成的板块列表。完成后,您可以将每个单独的板矢量适当地成形为矩阵:

# example data
ids = paste0(LETTERS, 1 : 1000)
# Ensure that IDs fit evenly into 96 well plates and fill potential
# empty wells with dummy data.
if (length(ids) %% n != 0L) {
    ids = c(ids, rep('', n - length(ids) %% n))
}

# Which plate (1 … number of plates) does each ID belong to?
plate_ids = (seq_along(ids) - 1L) %/% n + 1L

plates = lapply(
    split(ids, plate_ids),
    matrix,
    nrow = nrow,
    dimnames = list(LETTERS[seq_len(nrow)], seq_len(n %/% nrow))
)

也就是说,考虑一下矩阵列表是否是最方便使用的格式:最好有一个更高维的标识符数组;或仅是一个数据框(带有其他信息,例如每个孔的强度或其他度量值)。


要生成一个三维板阵列,下面的代码就足够了:

dim = c(nrow, n %/% nrow, length(ids) %/% n)
dimnames = list(LETTERS[seq_len(nrow)], seq_len(n %/% nrow), NULL)
plates = array(ids, dim = dim, dimnames = dimnames)

...假设ids已经被填充为上面代码中96的倍数。