我希望获取一份样品清单,并将其放入特定大小的数据框(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个样本,我希望一旦第一个样本已满就开始一个新的“标牌”数据帧。任何帮助表示赞赏。
答案 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的倍数。