Преобразование кадра данных в список списков на основе общих функций - PullRequest
0 голосов
/ 30 мая 2019

У меня есть большой фрейм данных, который я хотел бы преобразовать в список списков. Списки будут разделены по именам столбцов фрейма данных. Фрейм данных выглядит следующим образом.

df1 <- data.frame(TP1.expression =c(3, 8, 2),
                  TP1.pval = c(0.04, 0.03, 0.01),
                  TP1.log2fc = c(1, 0.3, 2.1),
                  TP2.expression =c(2, 4, 2.1),
                  TP2.pval = c(0.024, 0.02, 0.01),
                  TP2.log2fc = c(-1, 0.1, 3.1),
                  row.names = c('GeneA', 'GeneB', 'GeneC'))

Я хотел бы преобразовать df1 в список списков. Структура списка в идеале должна выглядеть следующим образом.

list1
   TP1
      TP1.expression       3, 8, 2
      TP1.pval             0.04, 0.03, 0.01
      TP1.log2fc           1, 0.3, 2.1
   TP2
      TP2.expression       2, 4, 2.1
      TP2.pval             0.024, 0.02, 0.01
      TP2.log2fc           -1, 0.1, 3.1

Таким образом, список будет разделен на целое число, найденное между TP и . символами.

Мне удалось разделить фрейм данных на более мелкие фреймы данных и повторно объединить их в список, но используемый метод был слишком конкретным. Я ищу что-то более общее, чтобы превратить в функцию.

Пример ниже разделит df1 на пять разных фреймов данных, которые затем могут быть повторно отсортированы в список. Я ищу более чистые способы сделать это.

tp <- c(1, 2, 3, 10, 14)
timepoint <- 'TP'
for (i in tp) {
  common <- paste0(timepoint, i)
  assign(common, df1[, grep(paste0(common, "\\."),   colnames(df1), ignore.case = T)])
  X <- list(TP1, TP2, TP3, TP10, TP14)
}

Помощь будет очень признателен.

1 Ответ

1 голос
/ 30 мая 2019

Мы могли бы использовать split.default, чтобы разделить столбцы на основе имен кадра данных, а затем использовать as.list для создания списков списка.

lapply(split.default(df1, sub("(TP\\d+).*", "\\1", names(df1))), as.list)

#$TP1
#$TP1$TP1.expression
#[1] 3 8 2

#$TP1$TP1.pval
#[1] 0.04 0.03 0.01

#$TP1$TP1.log2fc
#[1] 1.0 0.3 2.1


#$TP2
#$TP2$TP2.expression
#[1] 2.0 4.0 2.1

#$TP2$TP2.pval
#[1] 0.024 0.020 0.010

#$TP2$TP2.log2fc
#[1] -1.0  0.1  3.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...