r - 如何根据R中其他数据帧中的信息创建矩阵?

标签 r dataframe matrix assign

我有一个包含基因名称和 miRNA 相互作用信息的数据框。数据框如下所示:

df:

Gene      miRNA
ACP1    hsa-let-7a-5p
AGO4    hsa-let-7a-5p
AMMECR1 hsa-let-7a-5p
ATM     hsa-miR-100-5p
BMPR2   hsa-miR-100-5p
AGO1    hsa-miR-107
AGO2    hsa-miR-107
AGO3    hsa-miR-107

利用上述基因-miRNA 相互作用信息,我想创建一个矩阵。如果存在交互,我想分配 1(如果不是 0)。矩阵应如下所示:

          hsa-let-7a-5p hsa-miR-100-5p  hsa-miR-107
ACP1           1              0              0
AGO4           1              0              0
AMMECR1        1              0              0
ATM            0              1              0
BMPR2          0              1              0
AGO1           0              0              1
AGO2           0              0              1 
AGO3           0              0              1

我尝试使用xtabs来实现此目的。无法正确使用它。

xtabs(c(1L, 0L)[miRNA] ~ ., data=df)

结果如下所示:

Gene
   ACP1    AGO1    AGO2    AGO3    AGO4 AMMECR1     ATM   BMPR2 
      1       0       0       0       1       1       0       0 

感谢任何帮助。谢谢。

最佳答案

我们可以使用 mutate 创建一个虚拟列,并使用 pivot_wider 将数据转换为宽格式。

library(dplyr)
library(tidyr) # version ‘1.0.0’

df %>%
  mutate(n = 1) %>%
  pivot_wider(names_from = miRNA, values_from = n, values_fill = list(n = 0))
  #OR
  #spread(miRNA, n, fill = 0) in old tidyr


#  Gene    `hsa-let-7a-5p` `hsa-miR-100-5p` `hsa-miR-107`
#  <fct>             <dbl>            <dbl>         <dbl>
#1 ACP1                  1                0             0
#2 AGO4                  1                0             0
#3 AMMECR1               1                0             0
#4 ATM                   0                1             0
#5 BMPR2                 0                1             0
#6 AGO1                  0                0             1
#7 AGO2                  0                0             1
#8 AGO3                  0                0             1

如果每个 GenemiRNA 有多于一行,请首先使用 distinct

df %>%
  distinct() %>%
  mutate(n = 1) %>%
  pivot_wider(names_from = miRNA, values_from = n, values_fill = list(n = 0))

关于r - 如何根据R中其他数据帧中的信息创建矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58076738/

相关文章:

python - 将 1x1 稀疏矩阵转换为标量

RSelenium 与较新的 Firefox 图像 : Fail to decode image from marionette

r - 从分面 ggplot 中提取行数

python - 当快速在所有行中应用函数时,如何在 pandas numpy 中使用 if else

python - 在行中出现某个项目后,更改数据框中的所有行。

r - R 模型矩阵中因子的所有级别

r - 在 lapply 中使用 data.table 时 get 中的第一个参数无效

r - ggplot2:将边距之一保留为默认值

python - 将我自己的描述属性添加到 Pandas DataFrame

algorithm - Find Missing row in n*2^n matrix in 2^n time 算法题