r Формирование образцов в несколько кадров данных (96-луночный планшет) - PullRequest
0 голосов
/ 24 октября 2018

Мне не терпится взять список образцов и поместить его во фрейм данных определенного размера (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 голосов
/ 24 октября 2018

Функцию 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))
)

При этом подумайте, является ли список матриц наиболее удобным форматом для работы: он может бытьлучше иметь массив многомерных идентификаторов;или просто data.frame (с дополнительной информацией, такой как интенсивность или другое измерение для каждой лунки).


Для создания трехмерного массива пластин достаточно следующего кода:

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, как в моем коде выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...