Как манипулировать этой матрицей?

#r

#r

Вопрос:

У меня есть 3 столбца с большим количеством строк. 1-й и 3-й столбцы — это имена, а 2-й столбец — значения. Я хотел бы создать новую матрицу / data.frame, в которой 1-й столбец исходной матрицы становится уникальными именами строк, 3-й столбец становится уникальными именами столбцов, а значения из 2-го столбца правильно заполняются в новой матрице.

Исходная матрица

Комментарии:

1. Попробуйте xtabs(abundance ~ sample_id taxon_id, df1)

2.Получение этой ошибки xtabs(abundance ~ sample_id taxon_id,a) Error in FUN(X[[i]], ...) : invalid 'type' (character) of argument

3. Похоже abundance , это не числовой столбец. Проверьте свой набор данных. Если это не так, преобразуйте его в числовой

4. @akrun Да, только что нашел, но все равно получаю ту же таблицу. imgur.com/a/K99tjfA

5. xtabs должно нормально работать. Например. xtabs(mpg ~ am gear, mtcars) Вы не предоставили ни одного примера воспроизведения dput . Итак, он не может проверить проблему

Ответ №1:

Во-первых, вам нужно объединить несколько строк, потому что, если у вас есть комбинация unique sample_id и unique taxon_id , которая повторяется дважды, у вас не может быть уникального rowname и уникального colname в конечном выводе. Я выдвинул гипотезу о суммировании значений уникальной комбинации образец-таксон (с функцией group_by() и summarise() библиотекой dplyr).

Затем, поскольку я уверен, что у меня будут уникальные комбинации образцов и таксонов, я использовал функцию spread() из библиотеки tidyr, чтобы преобразовать столбец taxon-id в столбцы.

 library(dplyr)
library(tidyr)

data.frame(
  sample_id = rep('SRX14', 4),
  abundance = c(5, 0, 645, 1042),
  taxon_id  = c('TACGG', 'AACGT', 'TACGG', 'TACGA')
) %>% 

  group_by(sample_id, taxon_id) %>% 
  summarise(abundance = sum(abundance)) %>% 

  spread(key = taxon_id, value = abundance)

#   sample_id AACGT TACGA TACGG
#   <fct>     <dbl> <dbl> <dbl>
# 1 SRX14         0  1042   650