#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