【问题标题】:How to manipulate this matrix?如何操作这个矩阵?
【发布时间】:2019-04-14 18:14:46
【问题描述】:

我有 3 列有很多行。第 1 列和第 3 列是名称,第 2 列是值。我想创建一个新的矩阵/data.frame,其中原始矩阵的第一列成为唯一的行名,第三列成为唯一的列名,第二列的值正确填充到新矩阵中。

Original Matrix

【问题讨论】:

  • 试试xtabs(abundance ~ sample_id + taxon_id, df1)
  • 收到此错误xtabs(abundance ~ sample_id + taxon_id,a) Error in FUN(X[[i]], ...) : invalid 'type' (character) of argument
  • 看起来abundance 不是数字列。检查您的数据集。如果不是,则将其转换为数字
  • @akrun 是的,刚刚找到它,但仍然是同一张桌子。 imgur.com/a/K99tjfA
  • xtabs 应该可以正常工作。例如。 xtabs(mpg ~ am + gear, mtcars) 你没有提供任何带有dput 的复制示例。所以,它无法检查问题

标签: r


【解决方案1】:

首先,您必须聚合一些行,因为如果您有一个重复两次的唯一sample_id 和唯一taxon_id 的组合,那么最终输出中就不能有唯一的行名和唯一的列名。 我假设对一个独特的样本分类单元组合的值求和(使用库 dplyr 的函数 group_by()summarise())。

然后,由于我确定有独特的样本分类单元组合,我使用库 tidyr 中的函数 spread() 将列 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多